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方法中用到了交叉验证,所以上述相对交叉验证进行了学习说明。

下图需结合着文字一起看

CrossValidation 交叉验证和Stacking的深入理解_第1张图片

    例子: 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

 

 

你可能感兴趣的:(机器学习)