Stacking相比Linear Blending来说,更加强大,然而也更容易过拟合。
Stacking做法和Linear Blending类似,首先从数据集中训练出初级学习器,然后”生成“一个新的数据集用于训练次级学习器。为了防止过拟合,采用K折交叉验证法求解。
假设采用5折交叉验证,每个模型都要做满5次训练和预测,对于每一次:
从80%的数据训练得到一个模型ht,然后预测训练集剩下的那20%,同时也要预测测试集。
每次有20%的训练数据被预测,5次后正好每个训练样本都被预测过了。
每次都要预测测试集,因此最后测试集被预测5次,最终结果取5次的平均。
如果是分类问题,我们对测试集的结果就不能像回归问题一样直接取平均,而是分类器输出所有类别的概率,最后取平均。每个分类器都贡献了_N_CLASS(类别数)的维度。
由于sklearn并没有直接对Stacking的方法,因此我们需要下载mlxtend工具包(pip install mlxtend)