Ensemble 模型提高模型的预测能力

Kaggle竞赛中,排名靠前的团队都会用到ensemble的方法。最近学习使用ensemble方法,来提高模型预测的能力。

主要使用的是stacking方法(因为是初学者,以为stacking就是ensemble,看到kaggle的kernel有个很详细的guide,就选用了这个方法。最下面的code就是引用Introduction to Ensembling/Stacking in Python中的大部分code,进行少量的修改)

我使用的是具有2层结构的stacking方法:level_1: base models(多个简单的基础模型)。 level_2: 一个较为复杂的模型。stacking直接利用Base Model的预测结果,作为level_2 模型的输入数据来训练level_2的模型。

下面的描述主要来源于Stacking的思路及编码这篇。

Stacking主要应用的思路

在使用Stacking时,如果直接把所有的输入数据全部输入到Base Models会导致严重的过拟合问题.因此为了高效使用Stacking,通常的做法是使用交叉验证的思路对数据集进行拆分,然后分别训练Base Models.

使用数据的(hold-out-set)用来做预测.预测结果是由各个Base Model预测所得,结果需要保存下来留作第二层的输入进行训练使用.在这样一个迭代训练的过程中,每个模型都将被训练n次(n = cv,即交叉验证的folder数),做n次预测,将n次预测的结果拼接起来就是一列完整的预测数据.最终我们就可以得到一个(初始训练集行数 * Base Model数量)的矩阵,这个矩阵就会作为第二层Model的训练数据.得到最终的stacking模型。

你可能感兴趣的:(Ensemble 模型提高模型的预测能力)