(1)在集成学习中,将训练出的多个个体学习器(弱分类器)结合在一起的时候使用的方法叫做结合策略
(2) 个体学习器结合策略:
stacking集成方法与bagging、boosting有多处不同,比较重要的一点不同是个体学习器结合策略的不同。
Bagging :多个个体学习器投票(分类)或求均值(回归)
boosting:多个个体学习器加权融合
stacking :使用机器学习算法将个体学习器得到的结果结合在一起
(3)在stacking方法中,我们把个体学习器叫做初级学习器,用于结合的学习器叫做次级学习器或元学习器(meta-learner)。
(4)Stacking的实现,最先想到的方法是这样的:
1:用数据集D来训练模型h1,h2,h3…
2:用这些训练出来的初级学习器在数据集D上面进行预测,将结果作为次级训练集。
3:用次级训练集来训练次级学习器。
但是这样的实现是有很大的缺陷的。在原始数据集D上面训练的模型,然后用这些模型再在数据集D上进行预测得到的次级训练集肯定是非常好的,会出现过拟合的现象。
(5)现在我们说的stacking,是使用了****交叉验证思想****的stacking,将训练集分成K份,一份作为验证集,其余作为训练集,使用训练集训练模型,验证集来预测结果,来减少模型的过拟合。
举例子:
我们将假设训练数据:train.csv有1000行;测试数据:test.csv有200行。然后按照下图所示训练:
如图所示,我们现在用4折交叉验证来训练数据,
模型1要做满4次训练
第一次,model1,拿train.csv的750行做训练集,250行做验证集,然后预测出250行的数据a1。
第二次,model1,拿train.csv的750行做训练集,250行做验证集,然后预测出250行的数据a2。
第三次,model1,拿train.csv的750行做训练集,250行做验证集,然后预测出250行的数据a3。
第四次,model1,拿train.csv的750行做训练集,250行做验证集,然后预测出250行的数据a4。
然后将a1到a4拼接起来,得到一列,共1000行的数据。
对于模型2,过程与模型1一样,得到一列1000行数据
如果有4个基模型,那么根据train.csv会得到4列数据
将预测的结果(新特征)作为次级训练集,放到次级学习器中进行训练。
针对测试集test.csv有两种方法,一种是全部训练完成后,一次性预测输出200行数据;另一种是每个模型每次做完训练就拿test.csv中的数据做预测,一种得到4次200行的数据,然后做平均,得到一列200行的数据。
根据test.csv会得到4列200行的数据,最后,将训练好的模型预测4列200行的数据,得到的最终结果就是最后需要的数据。这仅仅只是2层stacking,多的可以有很多层。然后再放到一个模型中做训练。
Stacking完整的流程如下: