天池工业蒸汽量预测-模型验证

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

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=N1i=1N(yif^(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(y0f^(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=1nxi,即向量元素的绝对值之和。

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=1nxi2)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=1nxiq)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)=21j=1N(yjwTσ(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)=21j=1N(yjwTσ(xj))2+21j=1Nwjq

在这里插入图片描述

上述图片中,横轴代表 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 21j=1Nwjq的值。

       也可以看下面的三维图像

在这里插入图片描述

       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(yiw0j=1pwjxij)2+λj=1pwj2λ>=0

岭回归实例分享:
sklearn.linear_model.ridge_regression(X, y, alpha, *, sample_weight=None, solver=‘auto’, max_iter=None, tol=0.001, verbose=0, random_state=None, return_n_iter=False, return_intercept=False, check_input=True)

  • 参数:
    alpha:较大的值表示更强的正则化。浮点数
    sample_weight:样本权重,默认无。
    solver:求解方法,{‘auto’, ‘svd’, ‘cholesky’, ‘lsqr’, ‘sparse_cg’, ‘sag’, ‘saga’}, 默认=’auto’。
    • 'svd’使用X的奇异值分解来计算Ridge系数。
    • 'cholesky’使用标准的scipy.linalg.solve函数通过dot(XT,X)的Cholesky分解获得封闭形式的解。
    • 'sparse_cg’使用scipy.sparse.linalg.cg中的共轭梯度求解器。作为一种迭代算法,对于大规模数据(可能设置tol和max_iter),此求解器比“ Cholesky”更合适。
    • 'lsqr’使用专用的正则化最小二乘例程scipy.sparse.linalg.lsqr。它是最快的,并且使用迭代过程。
    • 'sag’使用随机平均梯度下降。
    • ‘saga’使用其改进的无偏版本SAGA。两种方法都使用迭代过程,并且当n_samples和n_features都很大时,通常比其他求解器更快。请注意,只有在比例大致相同的要素上才能确保‘sag’和‘saga’快速收敛。您可以使用sklearn.preprocessing中的缩放器对数据进行预处理。最后五个求解器均支持密集和稀疏数据。但是,当fit_intercept为True时,仅’sag’和’sparse_cg’支持稀疏输入。
from sklearn import linear_model
reg_rid = linear_model.Ridge(alpha=.5)
reg_rid.fit(X,y)
reg_rid.score(X,y)
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(yiw0j=1pwjxij)2+λj=1pwjλ>=0

Lasso实例分享:
class sklearn.linear_model.Lasso(alpha=1.0, *, fit_intercept=True, normalize=False, precompute=False, copy_X=True, max_iter=1000, tol=0.0001, warm_start=False, positive=False, random_state=None, selection=‘cyclic’)

  • 参数:
    alpha:正则化强度,1.0代表标准最小二乘。
    fit_intercept:是否计算模型截距。默认true。
    normalize:是否标准化,默认false。
    positive:是否强制系数为正,默认false。
from sklearn import linear_model
reg_lasso = linear_model.Lasso(alpha = 0.5)
reg_lasso.fit(X,y)
reg_lasso.score(X,y)

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

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

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

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

  1. 平均绝对值误差,也称L1损失(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=n1i=1nfiyi=n1i=1nei
    以下是sklearn中调用MAE的示例代码:
from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test,y_pred)
  1. 均方误差,也称L2损失(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=n1i=1n(observedipredictedi)2
    以下是sklearn中调用MAE的示例代码:
from sklearn.metrics import mean_squared_error
mean_squared_error(y_test,y_pred)
  1. 均方根误差(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 =n1i=1n(observedipredictedi)2
           以下是sklearn中调用RMSE的示例代码:
from sklearn.metrics import mean_squared_error
Pred_Error = mean_squared_error(y_test,y_pred)
Sqrt(Pred_Error)
  1. 均方对数差损失(Mean Squared Log Error,MSLE)
    l o s s ( y i ^ , y ) = 1 N ∑ i = 1 N ( l o g y i ^ − l o g y i ) 2 loss(\hat{y_i},y) = \frac{1}{N}\sum_{i=1}^N(log\hat{y_i}-logy_i)^2 loss(yi^,y)=N1i=1N(logyi^logyi)2

  2. 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^)=1i=0nsamples1(yiyiˉ)2i=0nsamples1(yiyi^)2
    以下是sklearn中调用R平方值的示例代码:

from sklearn.metrics import r2_score
r2_score(y_test,y_pred)
  1. Huber损失(Huber loss)
    H u b e r ( y i ^ , y i ) = { 1 2 ( y i ^ − y i ) 2 , ∣ y i ^ − y i ∣ ⩽ δ δ ∣ y i ^ − y i ∣ − 1 2 δ , 其 他 l o s s ( y i ^ , y ) = 1 N ∑ i = 1 N H u b e r ( y i ^ − y i ) Huber(\hat{y_i},y_i) = \begin{cases} \frac{1}{2}(\hat{y_i}-y_i)^2, |\hat{y_i}-y_i| \leqslant\delta \\ \delta |\hat{y_i}-y_i|-\frac{1}{2}\delta,其他 \end{cases} \\ loss(\hat{y_i},y)=\frac{1}{N}\sum_{i=1}^N{Huber(\hat{y_i}-y_i)} Huber(yi^,yi)={21(yi^yi)2,yi^yiδδyi^yi21δ,loss(yi^,y)=N1i=1NHuber(yi^yi)

  2. Log-Cosh损失函数(Log-Cosh loss)
    l o s s ( y i ^ , y ) = 1 N ∑ i = 1 N l o g ( c o s h ( y i ^ − y ) ) loss(\hat{y_i},y) = \frac{1}{N}\sum_{i=1}^N{log(cosh(\hat{y_i}-y))} loss(yi^,y)=N1i=1Nlog(cosh(yi^y))

       L2损失是使用最广泛的损失,在优化过程中更为稳定和准确,但是对于局外点敏感。L1损失会比较有效地惩罚局外点,但它的导数不连续使得寻找最优解的过程低效。Huber损失由L2损失与L1损失合成,当 δ \delta δ趋于0时退化成了L1损失,当 δ \delta δ趋于无穷时则退化为L2损失。 δ \delta δ决定了模型处理局外点的行为,当残差大于 δ \delta δ时使用L1损失,很小时则使用更为合适的L2损失来进行优化。Huber损失函数克服了L1损失和L2损失的缺点,不仅可以保持损失函数具有连续的导数,同时可以利用L2损失梯度随误差减小的特性来得到更精确的最小值,也对局外点具有更好的鲁棒性。但Huber损失函数的良好表现得益于精心训练的超参数 δ \delta δ。Log-Cosh损失拥有Huber损失的所有优点,并且在每一个点都是二次可导的,这在很多机器学习模型中是十分必要的。

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

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

  1. Logistic损失(Logistic loss)
    l o s s ( y ^ , y ) = ∏ i = 1 n y i ^ y i ∗ ( 1 − y i ^ ) 1 − y i loss(\hat{y},y) = \prod_{i=1}^n{\hat{y_i}^{y_i} * (1-\hat{y_i})^{1-y_i}} loss(y^,y)=i=1nyi^yi(1yi^)1yi
  2. 负对数似然损失(Negative Log Likelihood loss)
  3. 交叉熵损失(Cross Entropy loss)

       Logistic损失用于解决每个类别的二分类问题,为了方便数据集把最大似然转化为负对数似然,而得到负对数似然损失,交叉熵损失从两个类别扩展到M个类别,交叉熵损失在二分类时应当是负对数似然损失。
更多的分类指标请参照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
深度学习导论与应用实践

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值