集成学习—Stacking
一、引言
集成学习主要包括Bagging、Boosting和Stacking。本文主要介绍stacking方法。stacking(有时也称为stacked generalization)是一种分层模型集成框架,主要的思想是训练一个模型用于组合(combine)其他各个模型。stacking方法在各大数据挖掘比赛上都很风靡,模型融合之后能够小幅度地提高模型的预测准确度。
二、基本思想
stacking是一种有层次的集成学习方法,通过元分类器(meta-classifier)将多个个体分类模型(individual classification models)组合起来。首先,stacking方法从训练集上训练获得多个个体分类器;然后,将各个分类器的输出(元特征)组合起来,作为新的特征,构建新的训练集;最后,利用新构建的训练集训练元分类器。具体流程如下图:
训练阶段,若直接用训练个体分类器的训练集来产生元特征,过拟合风险过大。因此,stacking方法使用交叉验证的方式,用个体分类器未使用的样本来产生元分类器的训练集。以5折交叉验证为例,对某一个个体分类器使用交叉验证,将5个作为验证集的部分的输出组合起来作为元特征,具体过程如下图:
举个例子,假设训练集有10000条数据,测试集有2500条数据,对应上图,
- 用蓝色的8000条数据训练5个Model1,并分别对剩下的橙色的2000条验证数据,以及绿色的2500条测试数据进行预测,得到5*2000个和5*2500个预测的结果;
- 将5*2000个验证集的预测结果排成10000*1的矩阵A1,计算5*2500个测试集的预测结果的平均值的到2500*1的矩阵B1;
- 重复1,2,训练多个不同的Model2、Model3、…、Modelm,得到A1,B1,A2,B2,A3,B3,…,Am,Bm;
- 将A1,…,Am拼接成10000*m的矩阵作为新的训练集,将B1,…,Bm拼接成2500*m的矩阵作为新的测试集;
- 用新的训练集训练元分类器,并用训练好的元分类器对新测试集进行预测得到最终结果。
三、算法伪代码
- 过程1-4是利用原数据集训练出多个个体分类器;
- 过程5-8是使用训练出来的个体分类器来得预测的结果,并将这些预测的结果组合,当做元学习器的训练集;
- 过程9-11是用个体分类器预测的结果训练出元分类器,得到我们最后训练的模型;