IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 集成学习作业Task03 -> 正文阅读

[人工智能]集成学习作业Task03


本文为Datawhale组队学习项目——集成学习的作业Task

相关视频
相关资料

作业3

在这里插入图片描述

1.什么是偏差与方差

在这里插入图片描述
如上图所示:红色线表示真实模型,蓝色线表示一百个数据集用模型拟合而成的曲线,黑色线表示平均值,

偏差代表的是预测值与真实值的偏离程度,例如左边的两图,他们的预测图像(蓝色)与真实图像(红色)有较大差距,所以偏差大,而使用复杂图像使得预测图像与真实图像差距不大,,表示偏差小。

方差表示各个预测模型与其平均值之间的差别,例如右边两图,黑色表示的是平均了100个蓝色模型预测结果的平均模型,上图有大量模型与黑色模型有较大的数据差异,而下图各个预测模型围绕在黑色模型显得更紧凑,表明方差变小。

从图片来看。当数据点变多时,模型曲线更加“紧凑”,也就是方差变小,无论是简单还是复杂模型,而数据的多少对于偏差的影响不大。

模型的复杂程度对偏差的影响较大,当模型不好时,无论数据多少,最后的平均值都相似,偏差较大,当模型较好时,平均值曲线与真实曲线相似,说明偏差更小。

2. 偏差、方差与误差

偏差度量的是单个模型的学习能力,而方差度量的是同一个模型在不同数据集上的稳定性。

给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。

一般而言,增加模型的复杂度,会增加模型的方差,但是会减少模型的偏差,我们要找到一个方差–偏差的权衡,使得测试均方误差最。

3.训练误差与测试误差

我们的目的是选择一个测试误差达到最小的模型,但是实际上我们很难对实际的测试误差做精确的计算,因此我们要对测试误差进行估计,估计的方式有两种:训练误差修正与交叉验证。

模型越复杂,训练误差越小,测试误差先减小,随着模型过拟合而开始增加。

对测试误差进行估计,估计的方式有两种:训练误差修正与交叉验证

训练误差修正:在训练误差中加入惩罚项,避免其过拟合。

交叉验证:例如K折交叉验证,把训练样本分成K等分,然后用K-1个样本集当做训练集,剩下的一份样本集为验证集去估计由K-1个样本集得到的模型的精度,这个过程重复K次取平均值得到测试误差的一个估计

4.岭回归与Lasso回归

岭回归,又称L2正则化,在损失函数中添加如下惩罚项: λ ∑ j = 1 p w j 2 , ???? 其 中 , λ ≥ 0 \lambda\sum\limits_{j=1}^{p}w_j^2,\;\;其中,\lambda \ge 0\\ λj=1p?wj2?,λ0

调节参数 λ \lambda λ 的大小是影响压缩估计的关键, λ \lambda λ 越大,惩罚的力度越大,系数则越趋近于0,反之,选择合适的 λ \lambda λ 对模型精度来说十分重要。岭回归通过牺牲线性回归的无偏性降低方差,有可能使得模型整体的测试误差较小,提高模型的泛化能力。

Lasso回归,又称L1正则化,在损失函数中添加如下惩罚项 λ ∑ j = 1 p ∣ w j ∣ , ???? 其 中 , λ ≥ 0 \lambda\sum\limits_{j=1}^{p}|w_j|,\;\;其中,\lambda \ge 0 λj=1p?wj?,λ0

岭回归的一个很显著的特点是:将模型的系数往零的方向压缩,但是岭回归的系数只能趋于0但无法等于0,换句话说,就是无法做特征选择。而Lasso回归则可以使系数取0,起到特征选择的作用。

在这里插入图片描述
如上图,Lasso可以在坐标轴上去点,而岭回归则通常不行。

岭回归与Lasso回归的异同点:

  • 相同点:都是通过增加惩罚项,使得模型整体的测试误差较小,提高模型的泛化能力
  • 不同点:岭回归的系数只能趋于0但无法等于0,Lasso回归则可以使系数取0,起到特征选择的作用

5 椭球降维

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Make data
a,b,c= 5.0,25.0,7.0
u = np.linspace(0, 2 * np.pi, 100)
v = np.linspace(0, np.pi, 100)
x = a * np.outer(np.cos(u), np.sin(v))
y = b * np.outer(np.sin(u), np.sin(v))
z = c * np.outer(np.ones(np.size(u)), np.cos(v))




# Plot the surface
ax.plot_surface(x, y, z, color='b',cmap=cm.coolwarm)



plt.show()

在这里插入图片描述
使用PCA降维

data=[x[0],y[0],z[0]]
from sklearn.decomposition import PCA

data=np.array(data)



pca_sk = PCA(n_components=2)  
newdata = pca_sk.fit_transform(data.T)  

x1=newdata.T[0]
y1=newdata.T[1]

plt.plot(x1,y1)
plt.show()

在这里插入图片描述

6非线性降维

借用sklearn中decomposition.kernel_pca的案例

import numpy as np
import matplotlib.pyplot as plt

from sklearn.decomposition import PCA, KernelPCA
from sklearn.datasets import make_circles

np.random.seed(0)

X, y = make_circles(n_samples=400, factor=.3, noise=.05)

kpca = KernelPCA(kernel="rbf", fit_inverse_transform=True, gamma=10)
X_kpca = kpca.fit_transform(X)
X_back = kpca.inverse_transform(X_kpca)
pca = PCA()
X_pca = pca.fit_transform(X)

# Plot results

plt.figure()
plt.subplot(2, 2, 1, aspect='equal')
plt.title("Original space")
reds = y == 0
blues = y == 1

plt.scatter(X[reds, 0], X[reds, 1], c="red",
            s=20, edgecolor='k')
plt.scatter(X[blues, 0], X[blues, 1], c="blue",
            s=20, edgecolor='k')
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")

X1, X2 = np.meshgrid(np.linspace(-1.5, 1.5, 50), np.linspace(-1.5, 1.5, 50))
X_grid = np.array([np.ravel(X1), np.ravel(X2)]).T
# projection on the first principal component (in the phi space)
Z_grid = kpca.transform(X_grid)[:, 0].reshape(X1.shape)
plt.contour(X1, X2, Z_grid, colors='grey', linewidths=1, origin='lower')

plt.subplot(2, 2, 2, aspect='equal')
plt.scatter(X_pca[reds, 0], X_pca[reds, 1], c="red",
            s=20, edgecolor='k')
plt.scatter(X_pca[blues, 0], X_pca[blues, 1], c="blue",
            s=20, edgecolor='k')
plt.title("Projection by PCA")
plt.xlabel("1st principal component")
plt.ylabel("2nd component")

plt.subplot(2, 2, 3, aspect='equal')
plt.scatter(X_kpca[reds, 0], X_kpca[reds, 1], c="red",
            s=20, edgecolor='k')
plt.scatter(X_kpca[blues, 0], X_kpca[blues, 1], c="blue",
            s=20, edgecolor='k')
plt.title("Projection by KPCA")
plt.xlabel(r"1st principal component in space induced by $\phi$")
plt.ylabel("2nd component")

plt.subplot(2, 2, 4, aspect='equal')
plt.scatter(X_back[reds, 0], X_back[reds, 1], c="red",
            s=20, edgecolor='k')
plt.scatter(X_back[blues, 0], X_back[blues, 1], c="blue",
            s=20, edgecolor='k')
plt.title("Original space after inverse transform")
plt.xlabel("$x_1$")
plt.ylabel("$x_2$")

plt.tight_layout()
plt.show()

在这里插入图片描述

7三种模型简化的异同点

三种简化方法:特征提取、正则化、降维。

相同点:三种方法都是为了选择一个测试误差达到最小的模型,降低模型的复杂度、防止过拟合

不同点

  • 特征提取在原始数据集中提取特征的子集,是一种包含关系,不改变特征空间。
  • 降维主要通过属性间的关系,通过组合原有属性产生新的属性,最终会改变特征空间
  • 正则化则是为了对回归的系数进行约束或者加罚的技巧对p个特征的模型进行拟合,显著降低模型方差,而不是在特征上进行操作,但L1正则化可能起到特征选择的作用。

8 案例

使用svr训练手写数据集,经历特征选择、数据降维等步骤,并使用随机法选取超参数

import matplotlib.pyplot as plt
from sklearn.model_selection import cross_val_predict
from sklearn import datasets, svm, metrics
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import Lasso         # 获得特征重要度
rf = RandomForestRegressor()                     

#使用手写数字 数据集
digits = datasets.load_digits()
images_and_labels = list(zip(digits.images, digits.target))

#将数据化为矩阵
n_samples = len(digits.images)
data = digits.images.reshape((n_samples, -1))
target = digits.target


#取70%进行训练

train_num=int(n_samples*0.7+1)

#进行L1正则化进行特征选择

lasso = Lasso()                                   # 可在此步对模型进行参数设置,这里用默认值。
lasso.fit(data, target)                                   # 训练模型,传入X、y, 数据中不能包含miss_value
model = SelectFromModel(lasso,prefit=True)
data_new = model.transform(data)



#使用PCA进行降维
from sklearn.decomposition import PCA
from scipy.stats import uniform
pca= PCA(n_components=9) 
newdata = pca.fit_transform(data_new) 

# 使用 svc 进行训练
classifier = svm.SVC()

distributions = dict(gamma=uniform(loc=0, scale=4))
from sklearn.model_selection import RandomizedSearchCV

rs = RandomizedSearchCV(estimator=classifier,
                        param_distributions = distributions,scoring = 'r2',cv = 10)       # 10折交叉验证

rs = rs.fit(newdata,target)


print(rs.best_score_)
print(rs.best_params_)

参考资料

https://scikit-learn.org/stable/auto_examples/decomposition/plot_kernel_pca.html#sphx-glr-auto-examples-decomposition-plot-kernel-pca-py

如何用Python中的matplotlib画出一个椭球? - chaowei wu的回答 - 知乎
https://www.zhihu.com/question/266366089/answer/307037017

https://blog.csdn.net/weixin_41725746/article/details/95722708

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-23 11:28:02  更:2021-09-23 11:28:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:33:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码