周志华院士西瓜书实战(一)线性规划+多项式回归+逻辑回归+决策树

目录

1. 线性规划

2. 多项式回归

3. 逻辑回归手写数字

4. Pytorch MNIST

5. 决策树


1. 线性规划

先生成 Y=1.5X+0.2+ε 的(X,Y)训练数据   两个长度为30

import numpy as np
import matplotlib.pyplot as plt def true_fun(X): # 这是我们设定的真实函数,即ground truth的模型return 1.5*X + 0.2np.random.seed(0) # 设置随机种子
n_samples = 30 # 设置采样数据点的个数'''生成随机数据作为训练集,并且加一些噪声'''
X_train = np.sort(np.random.rand(n_samples)) 
y_train = (true_fun(X_train) + np.random.randn(n_samples) * 0.05).reshape(n_samples,1)

sklearn中线性回归模型    其中X_train[:,np.newaxis] 是把长度30的向量  转化为二维的(30,1)

from sklearn.linear_model import LinearRegression # 导入线性回归模型
model = LinearRegression() # 定义模型
model.fit(X_train[:,np.newaxis], y_train) # 训练模型
print("输出参数w:",model.coef_) # 输出模型参数w
print("输出参数b:",model.intercept_) # 输出参数b

可视化绘图一下   用 linspace 生成(0,1))之间100个点    分别输出散点图;原线性;拟合线性

X_test = np.linspace(0, 1, 100)
plt.plot(X_test, model.predict(X_test[:, np.newaxis]), label="Model")
plt.plot(X_test, true_fun(X_test), label="True function")
plt.scatter(X_train,y_train) # 画出训练集的点
plt.legend(loc="best")
plt.show()

2. 多项式回归

导入多项式和交叉验证的库  原函数为余弦函数

import numpy as np
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures # 导入能够计算多项式特征的类
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_scoredef true_fun(X): # 这是我们设定的真实函数,即ground truth的模型return np.cos(1.5 * np.pi * X)
np.random.seed(0)
n_samples = 30 # 设置随机种子X = np.sort(np.random.rand(n_samples)) 
y = true_fun(X) + np.random.randn(n_samples) * 0.1

3种多项式     polynomial_features构建x的多次方  再拼接到线性回归

degrees = [1, 4, 15] # 多项式最高次
plt.figure(figsize=(14, 5))
for i in range(len(degrees)):ax = plt.subplot(1, len(degrees), i + 1)plt.setp(ax, xticks=(), yticks=())polynomial_features = PolynomialFeatures(degree=degrees[i],include_bias=False)linear_regression = LinearRegression()pipeline = Pipeline([("polynomial_features", polynomial_features),("linear_regression", linear_regression)]) # 使用pipline串联模型pipeline.fit(X[:, np.newaxis], y)scores = cross_val_score(pipeline, X[:, np.newaxis], y,scoring="neg_mean_squared_error", cv=10) # 使用交叉验证

作图发现1欠拟合  15过拟合   4刚好

    X_test = np.linspace(0, 1, 100)plt.plot(X_test, pipeline.predict(X_test[:, np.newaxis]), label="Model")plt.plot(X_test, true_fun(X_test), label="True function")plt.scatter(X, y, edgecolor='b', s=20, label="Samples")plt.xlabel("x")plt.ylabel("y")plt.xlim((0, 1))plt.ylim((-2, 2))plt.legend(loc="best")plt.title("Degree {}\nMSE = {:.2e}(+/- {:.2e})".format(degrees[i], -scores.mean(), scores.std()))
plt.show()

10折交叉验证(数据分为10份,轮流用9份训练、1份验证,重复10次)

3. 逻辑回归手写数字

MNIST数据集每张图像是 28*28的 前60000张训练 后10000测试

LogisticRegression 使用L1正则化 选择求解器;训练容忍率(越小 训练久精度高)

对于train数据 fit拟合一下;对于test 计算误差值

import numpy as np
from sklearn.datasets import fetch_openml
from sklearn.linear_model import LogisticRegression# 数据
mnist = fetch_openml('mnist_784')
X, y = mnist['data'], mnist['target']
X_train = np.array(X[:60000], dtype=float)
y_train = np.array(y[:60000], dtype=float)
X_test = np.array(X[60000:], dtype=float)
y_test = np.array(y[60000:], dtype=float)print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)clf = LogisticRegression(penalty="l1", solver="saga", tol=0.1)
clf.fit(X_train, y_train)
score = clf.score(X_test, y_test)
print("Test score with L1 penalty: %.4f" % score)

4. Pytorch MNIST

在上上层路径加载数据集  并转化为Tensor形式

from torch.utils.data import DataLoader
from torchvision import datasets
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report
import numpy as np
import sys
from pathlib import Path
p_parent_path = str(Path().absolute().parent.parent)
sys.path.append(p_parent_path)
train_dataset = datasets.MNIST(root = p_parent_path+'/datasets/', train = True,transform = transforms.ToTensor(), download = True)
test_dataset = datasets.MNIST(root = p_parent_path+'/datasets/', train = False,transform = transforms.ToTensor(), download = True)

将图像数据从(60000, 1, 28, 28)转化为array 再转换为(60000, 784)的二维矩阵

batch_size = len(train_dataset)
train_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)
test_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)X_train,y_train = next(iter(train_loader))
X_test,y_test = next(iter(test_loader))# 合并数据并转换为numpy数组
X_train,y_train = X_train.cpu().numpy(),y_train.cpu().numpy() # tensor转为array形式)
X_test,y_test = X_test.cpu().numpy(),y_test.cpu().numpy() # tensor转为array形式)
X_train = X_train.reshape(X_train.shape[0],784)
X_test = X_test.reshape(X_test.shape[0],784)

使用L-BFGS优化器(拟牛顿法)  设置最大迭代次数为400次     指定多分类问题(multinomial)

model = LogisticRegression(solver='lbfgs', max_iter=400, multi_class='multinomial')
model.fit(X_train, y_train)# 评估模型
y_pred = model.predict(X_test)
print(classification_report(y_test, y_pred))

5. 决策树

加载iris数据集  把二维data加载到X  把向量加载到y(并且把0 1 2映射到真实花名)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn import tree# 加载数据集
data = load_iris()
X = pd.DataFrame(data.data, columns=data.feature_names)
y = pd.Series(data.target).map(dict(zip(np.unique(data.target), data.target_names)))

划分训练-测试集  建立决策树进行fit训练     criterion 可用 'gini' 基尼系数 或 'entropy' 信息增益

X_train, test_x, y_train, test_lab = train_test_split(X,y,test_size = 0.4,random_state = 42)
model = DecisionTreeClassifier(max_depth =3, random_state = 42)
model.fit(X_train, y_train) 

使用 文字/图像 两种方式输出

# 以文字形式输出树     
text_representation = tree.export_text(model)
print(text_representation)
# 用图片画出
plt.figure(figsize=(30,10), facecolor ='g') 
a = tree.plot_tree(model,feature_names = data.feature_names, #特征名class_names = y.unique(), #类名filled = True, #颜色深浅代表纯度fontsize=14)
plt.show()          
test_acc = model.score(test_x, test_lab)
print(f"\nTest Accuracy: {test_acc:.2f}")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92472.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

端到端供应链优化案例研究:需求预测 + 库存优化(十二)

本篇文章聚焦于供应链中的库存优化,技术亮点在于通过机器学习改进预测精度,成功将预测误差降低25%,并在六个月内实现库存过剩减少40%。该方法适用于需要优化库存和提升服务水平的商业场景,特别是制药行业,帮助企业在降…

Harbor 企业级实战:单机快速上手 × 高可用架构搭建 × HTTPS安全加固

文章目录一、建立项目二、命令行登录harbor(配置在客户端即可)三、给本地镜像打标签并上传到harbor四、下载harbor的镜像五、创建自动打标签上传镜像脚本六、修改harbor配置七、实现harbor高可用7.1 安装第二台harbor主机7.2 新建目标,输入第…

进程管理、系统高负载、cpu超过800%等实战问题处理

进程管理与高负载实战:CPU 飙到 800% 时的分析与处理 在生产环境中,系统高负载和 CPU 异常占用是运维工程师最常面对的场景之一。 这篇文章将从进程管理基础讲起,到高负载问题定位,再到CPU 占用 800% 的实战处理,帮助你…

控制建模matlab练习12:线性状态反馈控制器-①系统建模

此练习,主要是使用状态空间方程来设计控制器的方法和思路: ①系统建模; ②系统的能控性; ③极点配置; ④最优化控制LQR; ⑤轨迹追踪; 以下是,第①部分:系统建模&#xff…

bytearray和bytes

bytearray和bytes不一样的地方在于,bytearray是可变的。 str 人生苦短,我用Python! bytes bytearray(str.encode()) bytes bytearray(b\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe7\x94\xa8Python!) str bytes.d…

护网行动之后:容器安全如何升级?微隔离打造内网“微堡垒”

护网行动刚刚落下帷幕,但这场没有硝烟的攻防演练,留给安全行业的思考却从未停止。当“横向移动”成为攻击方屡试不爽的杀手锏时,一个过去可能被忽视的角落——容器网络安全,在本届护网中被推到了前所未有的高度。面对云原生时代容…

一动鼠标就锁屏,设备活动监控方案的技术实现与应用

摘要:本文探讨基于本地化监控机制实现设备操作追踪的技术方案,重点解析其触发逻辑与隐私保护机制。方案适用于需要监控设备使用场景的技术人员。一、核心功能实现原理触发监控机制键盘钩子:通过系统级键盘事件监听(AltL组合键激活…

从零开始学习:深度学习(基础入门版)(1天)

(一) opencv和opencv-contrib的安装(1.1)在桌面地底部的搜索栏,搜索命令提示符,点击并打开命令提示符(1.2)依次输入命令并按回车:pip install opencv-python3.4.18.65 -i…

SimpleMindMap:一个强大的Web思维导图

在信息爆炸的时代,如何高效地组织、记忆和表达复杂信息成为一项关键技能。思维导图作为一种强大的可视化工具,能够帮助我们理清思路、激发创意并提高学习效率。最近在逛github的时候发现了一个开源的思维导图工具SimpleMindMap,和家人们分享下…

正确使用 JetBrains

来自穷鬼的 marker !关键也不是全靠它吃饭,所以……请鄙视我就对了!2023.2.6 和 MybatisX 1.7.3 兼容性好像有些问题,会报错。想一想降级 MybatisX 不如升级一下 Idea。So, do this.官方下载安装包并装之。然后解锁无需下载文件、…

0_外设学习_ESP8266+云流转(no 0基础)

1、环境要求 2个ESP8266模块、2个USB转ESP8266,通过ESP8266_A-->(阿里云)云流转-->ESP8266_B,实现ESP8266_A发布话题,ESP8266_B订阅该话题。 2、阿里云云流转配置 1、基础要求: 添加1个产品&#xf…

AI漫画翻译器-上传图片自动翻译,支持多语言

本文转载自:AI漫画翻译器-上传图片自动翻译,支持多语言 - Hello123 ** 一、AI 漫画翻译器的核心定位 AI 漫画翻译器是专为漫画爱好者设计的智能翻译平台,通过深度学习技术实现漫画文本的精准识别与本地化转换。它能在保留原图排版和艺术风格…

有效介电常数

有效介电常数:如果导体的横截面被介质完全包裹,位于导体之间的电力线(如带状线)就会感受到相同的介电常数。然而,对于微带线、双绞线或共面线,导体周围的介质不是均匀的,所以一些电力线穿过空气,而另一些则穿过介质。图…

51c视觉~合集16

自己的原文哦~ https://blog.51cto.com/whaosoft/14117000 #港大成立计算与数据科学学院,计算机统计双剑合璧 刚刚,港大成立新的计算与数据科学学院,由计算机科学系和统计学系合并。马毅教授被任命为学院首任院长。 马毅教授官宣…

惯量时间常数 H 与转动惯量 J 的关系解析

惯量时间常数 H 与转动惯量 J 的关系解析 在电力系统稳定分析、旋转机械动力学等领域,惯量时间常数(H) 和 转动惯量(J) 是描述旋转体惯性特性的两个核心参数。二者虽然出发点不同,但在数学和物理层面具有紧…

DeepSeek-V3/R1 架构深度剖析:国产大模型的创新突围之路

本文深入解析 DeepSeek-V3/R1 的核心架构设计,揭示其如何在模型效率、推理性能与知识处理等维度实现突破,成为中文大模型领域的标杆之作。 引言:大模型竞技场中的"中国速度" #mermaid-svg-9Kk7tHp57CilWIFU {font-family:"trebuchet ms",verdana,arial,…

【从0到1制作一块STM32开发板】5. 整体布局

在之前的学习中,我偏向的多是嵌入式软件开发的工作,如果想要自己diy一款具备特定功能的嵌入式工具的话,还需要具备画板子的能力。但由于我目前还没学模电,故我打算直接找个b站的学习视频先跟着画个板子出来,简单理解各…

nflsoi 8.8 题解

感觉这把难,不过今天状态比较差,头昏昏的。怎么后面几道蓝题别人光速切掉了?不过赛后再来看感觉也不算特别麻烦的题目。 C.#11698 双循环锦标赛 / TopCoder 10687 The Basketball Div One 题意 约翰与布鲁斯对团体体育赛事颇有研究&#xff0…

面向真实场景的定制化图像降质模型设计方案

面向真实场景的定制化图像降质模型设计方案 1. 核心思路:从真实图像中学习退化模型 1.1 问题定义:合成数据与真实数据的域差距 在超分辨率(Super-Resolution, SR)算法的实际应用中,一个核心挑战源于训练数据与真实测…

计算机网络:一个 IP 地址可以同时属于 A 类、B 类或 C 类吗?

一个IP地址不可以同时属于A类、B类或C类。A类、B类、C类IP地址的划分有明确的规则,通过网络位的最高几位即可唯一确定其类别,不存在重叠的可能。 IP地址分类的核心规则(针对IPv4) IPv4地址由32位二进制数组成,通常分为…