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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 天池工业蒸汽量预测-模型验证 -> 正文阅读

[人工智能]天池工业蒸汽量预测-模型验证

作者:recommend-item-box type_blog clearfix

本文改编自《阿里云天池大赛赛题解析-机器学习篇》的第一部分工业蒸汽量预测的第五章-模型验证的内容。根据原有内容进行了部分素材的替换和知识点的归纳总结。新增了周志华老师的《机器学习》中的模型评估,以及Datawhale8月集成学习中的偏差与方差的均衡
上一篇工业蒸汽量预测-模型训练

5 模型验证

5.1 模型验证的概念和方法

5.1.1训练误差与测试误差

????????当我们的一个训练好的模型可以预测任意情况呢?答案显然是否定的。我们建立机器学习的目的并不是为了在已有的数据集,也就是训练集上效果表现非常优异,我们希望建立的机器学习模型在未知且情况复杂的测试数据上表现优异,我们称这样的未出现在训练集的未知数据集成为测试数据集,简称测试集。我们希望模型在测试集上表现优异!举个栗子,假如我们根据股票市场前六个月的数据拟合一个预测模型,我们的目的不是为了预测以前这六个月越准越好,而是预测明天乃至未来的股价变化。

???????在回归中,我们最常用的评价指标为均方误差,即: M S E = 1 N ∑ i = 1 N ( y i ? f ^ ( x i ) ) 2 MSE = \frac{1}{N}\sum\limits_{i=1}^{N}(y_i -\hat{ f}(x_i))^2 MSE=N1?i=1N?(yi??f^?(xi?))2,其中 f ^ ( x i ) \hat{ f}(x_i) f^?(xi?)是样本 x i x_i xi?应用建立的模型 f ^ \hat{f} f^?预测的结果。如果我们所用的数据是训练集上的数据,那么这个误差为训练均方误差,如果我们使用测试集的数据计算的均方误差,我们称为测试均方误差。一般而言,我们并不关心模型在训练集上的训练均方误差,我们关心的是模型面对未知的样本集,即测试集上的测试误差,我们的目标是使得我们建立的模型在测试集上的测试误差最小。那我们如何选择一个测试误差最小的模型呢?这是个棘手的问题,因为在模型建立阶段,我们是不能得到测试数据的,比如:我们在模型未上线之前是不能拿到未知且真实的测试数据来验证我们的模型的。在这种情况下,为了简便起见,一些观点认为通过训练误差最小化来选择模型也是可行的。这种观点表面看上去是可行的,但是存在一个致命的缺点,那就是:一个模型的训练均方误差最小时,不能保证测试均方误差同时也很小。对于这种想法构造的模型,一般在训练误差达到最小时,测试均方误差一般很大!如图:
在这里插入图片描述

在这里插入图片描述

???????可以看到:当我们的模型的训练均方误差达到很小时,测试均方误差反而很大,但是我们寻找的最优的模型是测试均方误差达到最小时对应的模型,因此基于训练均方误差达到最小选择模型本质上是行不同的。正如上右图所示:模型在训练误差很小,但是测试均方误差很大时,我们称这种情况叫模型的过拟合

5.1.2偏差-方差的权衡:

???????从上图的测试均方误差曲线可以看到:测试均方误差曲线呈现U型曲线,这表明了在测试误差曲线中有两种力量在互相博弈。可以证明:
E ( y 0 ? f ^ ( x 0 ) ) 2 = Var ? ( f ^ ( x 0 ) ) + [ Bias ? ( f ^ ( x 0 ) ) ] 2 + Var ? ( ε ) E\left(y_{0}-\hat{f}\left(x_{0}\right)\right)^{2}=\operatorname{Var}\left(\hat{f}\left(x_{0}\right)\right)+\left[\operatorname{Bias}\left(\hat{f}\left(x_{0}\right)\right)\right]^{2}+\operatorname{Var}(\varepsilon) E(y0??f^?(x0?))2=Var(f^?(x0?))+[Bias(f^?(x0?))]2+Var(ε)
???????也就是说,我们的测试均方误差的期望值可以分解为 f ^ ( x 0 ) \hat{f}(x_0) f^?(x0?)的方差、 f ^ ( x 0 ) \hat{f}(x_0) f^?(x0?)的偏差平方和误差项 ? \epsilon ?的方差。为了使得模型的测试均方误差达到最小值,也就是同时最小化偏差的平方和方差。由于我们知道偏差平方和方差本身是非负的,因此测试均方误差的期望不可能会低于误差的方差,因此我们称 Var ? ( ε ) \operatorname{Var}(\varepsilon) Var(ε)为建模任务的难度,这个量在我们的任务确定后是无法改变的,也叫做不可约误差。那么模型的方差和偏差的平方和究竟是什么呢?所谓模型的方差就是:用不同的数据集去估计 f f f时,估计函数的改变量。举个例子:我们想要建立一个线性回归模型,可以通过输入中国人身高去预测我们的体重。但是显然我们没有办法把全中国13亿人做一次人口普查,拿到13亿人的身高体重去建立模型。我们能做的就是从13亿中抽1000个样本进行建模,我们对这个抽样的过程重复100遍,就会得到100个1000人的样本集。我们使用线性回归模型估计参数就能得到100个线性回归模型。由于样本抽取具有随机性,我们得到的100个模型不可能参数完全一样,那么这100个模型之间的差异就叫做方差。显然,我们希望得到一个稳定的模型,也就是在不同的样本集估计的模型都不会相差太大,即要求f的方差越小越好。一般来说,模型的复杂度越高,f的方差就会越大。 如加入二次项的模型的方差比线性回归模型的方差要大。
在这里插入图片描述

???????另一方面,模型的偏差是指:为了选择一个简单的模型去估计真实函数所带入的误差。假如真实的数据X与Y的关系是二次关系,但是我们选择了线性模型进行建模,那由于模型的复杂度引起的这种误差我们称为偏差,它的构成是复杂的。偏差度量了学习算法的期望预测与真实结果的偏离程度,即刻画了学习算法本身的拟合能力。偏差度量的是单个模型的学习能力,而方差度量的是同一个模型在不同数据集上的稳定性。“偏差-方差分解”说明:泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。给定学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。
在这里插入图片描述

???????一般而言,增加模型的复杂度,会增加模型的方差,但是会减少模型的偏差,我们要找到一个方差–偏差的权衡,使得测试均方误差最小。
在这里插入图片描述

5.1.3 欠拟合与过拟合

???????当一个模型恰到好处地表达了数据关系时,我们就认为这个模型拟合效果好。欠拟合(underfitting),也叫高偏差(bias),是指算法所训练的模型不能完整地表达数据关系。在这种情况下,一般也可通过增加额外的特征、增加多项式特征,减小 λ \lambda λ的值等方法来优化模型。过拟合(overfitting),也叫高方差(variance),指的是算法所训练的模型过多地表达了数据关系,此时很有可能表达的是数据间的噪声关系。在这种情况下,一般可通过收集更多的数据、使用更少的特征、增加 λ \lambda λ的值等方法来优化模型。

在这里插入图片描述在这里插入图片描述在这里插入图片描述
欠拟合拟合过拟合

5.1.4 模型的泛化与正则化

???????泛化是指机器学习模型学习到的概念在处理训练过程中未遇到的样本的表现,即模型处理新样本的能力。

???????正则化(Regularization是给需要训练的目标函数加上一些规则(限制),目的是为了防止过拟合。(在统计领域中,正则化也称作压缩估计),正则化的主要目的是通过特征选择即对回归函数的系数进行约束,显著降低模型方差,最终降低测试误差。

具体说,就是将回归系数往零的方向压缩,这也就是为什么叫压缩估计的原因。

5.1.4.1 正则化种类

???????L1,L2正则化(L1,L2Regularization)使用的正则化项分别是L1范数、L2范数,其中:

L1范数,公式为 ∣ ∣ x ∣ ∣ 1 = ∑ i = 1 n ∣ x i ∣ ||x||_1 = \sum^n_{i=1}{|x_i|} x1?=i=1n?xi?,即向量元素的绝对值之和。

L2范数,公式为 ∣ ∣ x 2 ∣ ∣ = ( ∑ i = 1 n ∣ x i ∣ 2 ) 1 2 ||x_2||=(\sum^n_{i=1}{|x_i|^2})^\frac{1}{2} x2?=(i=1n?xi?2)21?,又叫欧几里得(Euclid)范数,即向量元素绝对值平方和再进行开方。

L-q范数,公式为 ∣ ∣ x ∣ ∣ q = ( ∑ i = 1 n ∣ x i ∣ q ) 1 q ||x||_q = (\sum_{i=1}^n{|x_i|}^q)^\frac{1}{q} xq?=(i=1n?xi?q)q1?,即向量元素绝对值的q次幂的累加和再 1 q \frac{1}{q} q1?次幂

???????上述公式中, n n n为模型的阶次,即模型有几个变量(对应数据有几个维度)

???????对于回归问题来说,模型训练(拟合过程)的目的即找到最佳的回归系数(函数自变量前的系数),最佳回归系数的确定即通过对损失函数求最小值,使损失函数值最小的 W W W即为最佳回归系数

???????一般的损失函数(无正则项)为:
E ( w ) = 1 2 ∑ j = 1 N ( y j ? w T σ ( x j ) ) 2 E(w)=\frac{1}{2}\sum_{j=1}^N({y_j-w^T\sigma(x_j)})^2 E(w)=21?j=1N?(yj??wTσ(xj?))2

E(w)是损失函数(又称误差函数或代价函数),E即Evaluate,有时写成L即Loss。 y j y_j yj?是测试集的真实值。

W W W是函数的变量权重, w T σ ( x j ) w^T\sigma(x_j) wTσ(xj?)即为测试集的预测值。

σ ( x j ) \sigma(x_j) σ(xj?)是基函数,例如多项式函数,核函数。

测试集共有N个样本。

整个函数为均方误差的形式, 1 2 \frac{1}{2} 21?只是为了求导方便,不影响 W W W的取值。

???????加入正则化项后的损失函数为:
E ( w ) = 1 2 ∑ j = 1 N ( y j ? w T σ ( x j ) ) 2 + 1 2 ∑ j = 1 N ∣ w j ∣ q E(w)=\frac{1}{2}\sum_{j=1}^N({y_j-w^T\sigma(x_j)})^2+\frac{1}{2}\sum_{j=1}^N{|w_j|}_q E(w)=21?j=1N?(yj??wTσ(xj?))2+21?j=1N?wj?q?

在这里插入图片描述

上述图片中,横轴代表 w 1 w_1 w1?,纵轴代表 w 2 w_2 w2?,其实就是函数自变量的系数。绿线是等高线,也就是俯视图,而z轴代表的是 1 2 ∑ j = 1 N ∣ w j ∣ q \frac{1}{2}\sum_{j=1}^N{|w_j|}_q 21?j=1N?wj?q?的值。

???????也可以看下面的三维图像

在这里插入图片描述

???????q=2的俯视图是一个圆很好理解,考虑到 z = w 1 2 + w 2 2 z=w_1^2+w_2^2 z=w12?+w22?就是抛物面,其俯视图是一个圆。

???????参数空间L2正则化和参数空间L1正则化的示意图分别如下所示。可以注意到L1正则化的最小值 w 1 = 0 w_1=0 w1?=0,即变量 x 1 x_1 x1?的系数为0,起到了降维的作用(降低模型复杂度,防止过拟合)。

在这里插入图片描述

蓝色的圆圈表示没有经过限制的损失函数在寻找最小值过程中,w的不断迭代的变化情况,表示的方法是等高线。蓝线和红线的交点 w ? w^* w?是最小值取到的点。

5.1.4.2 岭回归

???????对参数空间进行L2范数正则化的线性模型称为岭回归(Ridge Regression)
J ( w ) = ∑ i = 1 N ( y i ? w 0 ? ∑ j = 1 p w j x i j ) 2 + λ ∑ j = 1 p w j 2 , 其 中 λ > = 0 J(w)=\sum_{i=1}^N(y_i-w_0-\sum_{j=1}^p{w_jx_{ij}})^2+\lambda\sum_{j=1}^p{w_j}^2 ,其中\lambda>=0 J(w)=i=1N?(yi??w0??j=1p?wj?xij?)2+λj=1p?wj?2λ>=0

5.1.4.3 LASSO回归

???????对参数空间进行L1范数正则化的线性模型称为LASSO回归(LASSO Regression)
J ( w ) = ∑ i = 1 N ( y i ? w 0 ? ∑ j = 1 p w j x i j ) 2 + λ ∑ j = 1 p ∣ w j ∣ , 其 中 λ > = 0 J(w)=\sum_{i=1}^N(y_i-w_0-\sum_{j=1}^p{w_jx_{ij}})^2+\lambda\sum_{j=1}^p|w_j| ,其中\lambda>=0 J(w)=i=1N?(yi??w0??j=1p?wj?xij?)2+λj=1p?wj?λ>=0

5.1.5 回归模型的评估指标和调用方法

???????这里评估指标一般用于对经过训练集训练后的模型来使用的,以各项指标的评估得分来比较模型的性能。因为模型上限后,一般的未知样本的标签是较难得到的。

这里注意要与参数估计中的公式区分开,虽然有些参数估计的公式用到了诸如MSE的方法,但只是方法相同,用处却不一样。

???????回归模型的评估指标有平均绝对值误差均方误差均方根误差R平方值

1.平均绝对值误差(MAE)是预测值与真实值之差的绝对值,计算公式如下:
M A E = 1 n ∑ i = 1 n f i ? y i = 1 n ∑ i = 1 n e i MAE = \frac{1}{n}\sum_{i=1}^n{f_i-y_i}=\frac{1}{n}\sum_{i=1}^n{e_i} MAE=n1?i=1n?fi??yi?=n1?i=1n?ei?
以下是sklearn中调用MAE的示例代码:

from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test,y_pred)

2.均方误差(MSE)是指的参数估计值与参数真实值之差平方的期望值。MSE是衡量平均误差的一种较方便的方法,可以用来评价数据的变化程度。MSE的值越小,说明预测模型描述实验数据具有越好的精确度,计算公式如下:
M S E = 1 n ∑ i = 1 n ( o b s e r v e d i ? p r e d i c t e d i ) 2 MSE = \frac{1}{n}\sum_{i=1}^n{(observed_i-predicted_i)^2} MSE=n1?i=1n?(observedi??predictedi?)2
以下是sklearn中调用MAE的示例代码:

from sklearn.metrics import mean_squared_error
mean_squared_error(y_test,y_pred)

3.均方根误差(RMSE)是MSE的平方根,计算公式如下:
R M S E = M S E = S S E n = 1 n ∑ i = 1 n ( o b s e r v e d i ? p r e d i c t e d i ) 2 RMSE =\sqrt{MSE}=\sqrt{\frac{SSE}{n}}= \frac{1}{n}\sum_{i=1}^n{(observed_i-predicted_i)^2} RMSE=MSE ?=nSSE? ?=n1?i=1n?(observedi??predictedi?)2
???????以下是sklearn中调用RMSE的示例代码:

from sklearn.metrics import mean_squared_error
Pred_Error = mean_squared_error(y_test,y_pred)
Sqrt(Pred_Error)

4.R平方值(R-Squared)反映了回归模型在多大程度上解释了因变量的变化,或者说模型对观测值的拟合程度如何。计算公式如下:
R 2 ( y , y ^ ) = 1 ? ∑ i = 0 n s a m p l e s ? 1 ( y i ? y i ^ ) 2 ∑ i = 0 n s a m p l e s ? 1 ( y i ? y i ˉ ) 2 R^2(y,\hat{y})=1-\frac{\sum_{i=0}^{n_{samples}-1}(y_i-\hat{y_i})^2}{\sum_{i=0}^{n_{samples}-1}(y_i-\bar{y_i})^2} R2(y,y^?)=1?i=0nsamples??1?(yi??yi?ˉ?)2i=0nsamples??1?(yi??yi?^?)2?
以下是sklearn中调用R平方值的示例代码:

from sklearn.metrics import r2_score
r2_score(y_test,y_pred)

更多的回归指标请参照sklearn回归指标

5.1.6 分类模型的评估指标和调用方法

更多的分类指标请参照sklearn分类指标

5.1.7 评估方法

在周志华老师的《机器学习》一书中,将评估方法分为三类 ,分别是留出法、交叉验证法、自助法。评估方法其实指的是数据集划分训练和测试的划分方法。

???????交叉验证(Cross Validation)是验证分类器性能的一种统计分析方法,其基本思想是在某种意义下将原始数据进行分组,一部分作为训练集,另一部分作为验证集。首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型,以此来作为评价分类器的性能指标。常用的交叉验证法包括简单交叉验证K折交叉验证留一法交叉验证留P法交叉验证

1.简单交叉验证

???????简单交叉验证(Cross Validation)是将原始数据随机分为两组,一组作为训练集,另一组作为验证集,利用训练集训练分类器,然后利用验证集验证模型,将最后的分类准确率作为此分类器的性能指标。通常划分30%的数据作为测试数据。

2.K折交叉验证

???????K折交叉验证(K-Fold Cross Validation),是将原始数据分成K组(一般是均分),然后将每个子集数据分别做一次验证集,其余K-1组子集数据做训练集,这样就会得到K个模型,将K个模型最终的验证集的分类准确率取平均值,作为K折交叉验证分类器的性能指标。通过设置K大于或等于3。

???????当数据集比较大时,K不能取值过大,例如数据集包含1百万个样本,则需要训练1百万个模型,这还是未考虑算法调参的情况下。

3.留一法交叉验证

???????留一法交叉验证(Leave-One-Out Cross Validation,LOO-CV),是指每个训练集由除一个样本之外的其余样本组成,留下的一个样本为验证集。这样,对于N个样本的数据集,最终可以形成N个模型,用N个模型最终的验证集的分类准确率的平均数作为分类器的性能指标。留一法是K折交叉验证,K=N时的特例

???????留一法中被实际评估的模型与期望评估的用全部数据集D训练出的模型很相似。因此,留一法的评估结果往往被认为比较准确。但留一法的估计结果未必永远比其他评估方法准确;“没有免费的午餐”NFL定理对实验评估方法同样适用。 ———周志华《机器学习》P27

4.留P法交叉验证

???????留P法交叉验证(Leave-P-Out Cross Validation,LPO-CV),与留一法交叉验证类似,是从完整的数据集中删除p个样本,产生所有可能的训练集和验证集。对于N个样本,能产生(N,p)个训练-检验对。也就是每个训练集由除P个样本之外的其余样本组成,留下的P个样本为验证集。

???????注意:训练/测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外的偏差而对最终结果产生影响,例如在分类任务中至少要保持样本的类别比例相似—分层采样(stratified sampling)。

???????即使在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集D进行分割。不同的分割将导致不同的训练/测试集,相应的,模型评估的结果也会有所差别。因此在采用留出法时往往采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果

5.1.8 几种交叉验证在sklearn中的调用方法

(1)简单交叉验证

from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
iris = load_iris()
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=.4,random_state=0)

(2)K折交叉验证

from sklearn.model_selection import KFold
kf = KFold(n_splits=10)

(3)留一法交叉验证:

from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()

(4)留P法交叉验证:

from sklearn.model_selection import LeavePOut
lpo = LeavePOut(p=5)

具体的应用方式参照下例:

???????我们将使用重复的分层k-fold交叉验证来评估该模型,一共重复3次,每次有10个fold。我们将评估该模型在所有重复交叉验证中性能的平均值和标准差。

from sklearn import tree
clf = tree.DecisionTreeClassifier()
cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)
n_scores = cross_val_score(clf, X, y, scoring='accuracy', cv=cv, n_jobs=-1, error_score='raise')
print(np.mean(n_scores))

参考资料

正则化
阿里云天池大赛赛题解析-机器学习篇
DataWhale8月集成学习Day2

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-10-19 11:52:51  更:2021-10-19 11:54:25 
 
开发: 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年5日历 -2024/5/10 18:04:30-

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