CrossValidation 交叉验证和Stacking的深入理解

1、CrossValidation 交叉验证

训练集,测试集,和验证集三者之间的关系:

     首先要了解到我们的数据集一般分为训练集,测试集,和验证集,训练集主要是训练,验证集主要是为了验证模型的性能,从而选择不同的模型参数,测试集就是进行最终模型的测试,比如准确率是多少,这里的最终模型一般指的是经过验证集从而选择合适的参数从而得到的模型,因此三者之间的关系大概就是这样的。

什么是交叉验证:

    以5 折交叉验证举例(留一法等就不做介绍了),将我们的数据集平均分5份:A1,A2,A3,A4,A5,然后不断的选取其中的四份做训练集,另外一份做验证集,训练过程如下

模型M1:
在{A2,A3,A4,A5}基础上构建模型M1,并对数据集A1进行验证,将预测值与真值进行比较,在某一评价标准下,计算一个得分a1,1(代表模型M1对A1验证集的预测得分)
.
在{A1,A3,A4,A5}
基础上构建模型M1,并对数据集A2进行验证,将预测值与真值进行比较,在同一评价标准下,计算一个得分a1,2
.
……
在{A1,A2,A3,A4}
基础上构建模型,并对数据集A5进行验证,将预测值与真值进行比较,在同一评价标准下,计算一个得分a1,5
.
a1=a1,1+a1,2+…+a1,5/5
作为模型M1的综合得分。

为什么要有交叉验证:

    1、为了更好地对数据进行学习,特别是样本数据比较小的时候,这样的话样本中的全部数据都被学习过了,可以说是学习了样本的全部分布

    2、在过拟合和预测误差之间做一个平衡,好的模型是对数据有精确的预测,而不是对数据进行好的拟合,也就是说我们的模型要有泛化性能,经过交叉验证的模型一般都很好的做到了这一点。

2、stacking 

    在数据比赛中,stacking是一个很好的模型融合方法,通过融合多个模型来达到更好的效果,相当于“三个臭皮匠顶个诸葛亮”,stacking方法中用到了交叉验证,所以上述相对交叉验证进行了学习说明。

下图需结合着文字一起看

    例子: XGBoost模型进行5折交叉验证,如:用XGBoost作为基础模型Model1,5折交叉验证就是先拿出四折作为training data,另外一折作为testing data。注意:在stacking中此部分数据会用到整个traing set。如:假设我们整个training set包含10000行数据,testing set包含2500行数据,那么每一次交叉验证其实就是对training set进行划分,在每一次的交叉验证中training data将会是8000行,testing data是2000行。

每一次的交叉验证包含两个过程,1. 基于training data训练模型;2. 基于training data训练生成的模型对testing data进行预测。在整个第一次的交叉验证完成之后我们将会得到关于当前testing data的预测值,这将会是一个一维2000行的数据,记为a1。注意!在这部分操作完成后,我们还要对数据集原来的整个testing set进行预测,这个过程会生成2500个预测值,这部分预测值将会作为下一层模型 测试集 的一部分,记为b1。因为我们进行的是5折交叉验证,所以以上提及的过程将会进行五次,最终会生成针对 testing data 数据预测的5列2000行的数据a1,a2,a3,a4,a5,对 testing set 的预测会是5列2500行数据b1,b2,b3,b4,b5。

在完成对Model1的整个步骤之后,我们可以发现a1,a2,a3,a4,a5其实就是对原来整个testing data的预测值,将他们拼凑起来,会形成一个10000行一列的矩阵,记为A1。而对于b1,b2,b3,b4,b5这部分数据,我们将各部分相加取平均值,得到一个2500行一列的矩阵,记为B1。

以上就是stacking中一个模型的完整流程,stacking中同一层通常包含多个模型,假设还有Model2: LR,Model3:RF,Model4: GBDT,Model5:SVM,对于这四个模型,我们可以重复以上的步骤,在整个流程结束之后,我们可以得到新的A2,A3,A4,A5,B2,B3,B4,B5矩阵。

在此之后,我们把A1,A2,A3,A4,A5并列合并得到一个10000行五列的矩阵作为新的训练集+(label还是原来真实的label),B1,B2,B3,B4,B5并列合并得到一个2500行五列的矩阵作为对应的新的测试集

这样的话我们就可以进行新模型的搭建,比如搭建一个LR模型,A1,A2,A3,A4,A5并列合并得到一个10000行五列的矩阵作为输入X,原来的label作为 Y ,训练模型,并且利用新的测试集进行预测。

以上即为stacking的完整步骤!

参考文章:

https://blog.csdn.net/qq_18916311/article/details/78557722

https://blog.csdn.net/wstcjf/article/details/77989963

https://blog.csdn.net/xiaoliuzz/article/details/79298841

 

 

### 回答1: 是的,stacking 确实包含交叉验证,这是为了选择最优的基本模型参数。在 stacking 中,我们首先使用交叉验证来训练多个基本模型,然后使用这些基本模型的预测来训练一个新的模型(称为元模型)。最后,我们使用最优的参数来训练最终的 stacking 模型。 ### 回答2: Stacking是一种集成学习方法,它包含了交叉验证的过程,用于选择最优的基本模型参数。 首先,交叉验证是一种评估模型性能和选择参数的常用方法。它将训练数据集划分为若干个子集,通过训练模型和在验证集上评估模型的性能来选择最优的参数。常见的交叉验证方法有K折交叉验证和留一交叉验证。 对于Stacking来说,它的目标是将多个基本模型组合起来,形成一个更强大的模型。在使用交叉验证选择最优的基本模型参数时,我们可以将训练数据集划分为若干个子集,对于每个子集,我们可以通过交叉验证的方式来选择最优的参数。 具体步骤如下:首先,将训练数据集分为K个子集,在每一次交叉验证中,使用K-1个子集作为训练集,剩下的一个子集作为验证集,然后使用不同的参数组合训练多个基本模型。接下来,使用验证集评估每个基本模型的性能,选择性能最好的基本模型参数。最后,使用整个训练集重新训练最优参数的基本模型,并将其与其他基本模型组合在一起形成Stacking模型。 通过这个过程,我们可以选择到最优的基本模型参数,从而提高Stacking模型的整体性能。这种结合了交叉验证和参数选择的方式,可以更好地利用训练数据集,提高模型的泛化能力。 ### 回答3: Stacking是一种集成学习方法,它包括交叉验证和用于选择最优的基本模型参数。 首先,交叉验证是一种评估模型性能的方法。在Stacking中,我们将训练数据集分成若干个折,每次迭代时,我们将其中一部分数据作为验证集,其余的数据作为训练集。通过多次交叉验证,我们可以得到不同参数下模型的平均性能,从而更准确地评估模型的泛化能力。 其次,在Stacking中,我们使用多个基本模型进行训练,并在训练过程中尝试不同的模型参数。通过交叉验证,我们可以选择最优的基本模型参数。例如,我们可以使用Grid Search(网格搜索)方法,在给定的参数空间中进行全面搜索,以找到最佳的参数组合。在每次交叉验证中,我们将不同参数组合下的基本模型进行训练,并计算其性能指标。最后,我们选择性能最好的参数组合作为基本模型的最优参数。 Stacking的思想是将不同的基本模型的预测结果作为新的特征,再训练一个次级模型来预测最终的结果。在Stacking的过程中,我们可以使用不同的基本模型,并对每个基本模型的最优参数进行选择。通过这种方式,我们可以充分利用各种模型的优势,并将它们集成在一起,以提高整体预测的准确性和泛化能力。 总而言之,Stacking包含交叉验证和基本模型参数的选择过程。通过交叉验证,我们可以评估模型的性能,并选择最佳的基本模型参数。这种集成学习方法可以提高预测的准确性和泛化能力,适用于各种机器学习问题。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值