Intro
机器学习比赛中常常会用到的一个技巧:stacking,它通过组合不同的预测模型来提高最终结果的准确率。下面内容主要是阅读文章后,总结学习到的一些东西。
Example
以kaggle上房屋价格预测为例,该挑战给出了有关房屋的多维特征,目标是通过构建模型,预测房屋的价格。stacking的可行做法如下:
将训练集随机分成10 folds,留最后一份作为验证集(holdout data for validation)。前9份在level 1中使用;
level 1: 选取XGBoost, neural network, support vector regression这三个模型,对于每个模型M,交叉验证的方式产生一个预测结果(用8份训练模型,1份预测结果)。
level 2: 每个模型产生了一个9 folds大小的预测结果,将它们当成训练的feature,训练一个线性模型,并在最后一份数据上面做验证。
Some points
- out-of-example
第一层level中,通过交叉验证的方式构造第二层level中的输入训练集。第二层level中,用初始化预留的最后一折数据做模型验证。
假设不按照如上方法,而是在level 1时,使用全部的训练数据对模型进行参数拟合,将预测结果用于level 2时,就会出现过拟合的问题,导致偏差增大(预测结果会偏向M个模型中效果最好的一个)。
stacking方法通过使用out-of-example预测,有可能使level 2的预测结果好于level 1中的各个单模型。
具体流程,如下图:
- work for small/medium dataset
stacking适合中小规模数据集
- detail
重复10次,将训练集划分10-folds。这会产生10个level 2的预测结果,可以对该结果集取平均。
一旦确定stacking可以提高预测结果的精度,将整个流程再次运行一次。此时不再保留第 N folds作为holdout data。用N-1 folds训练模型,得到剩余1折的预测结果。集齐训练集的全部预测结果,作为level 2的输入,训练模型,输出最终测试集的结果。