Stacking

经典Stacking模型是指将多种分类器组合在一起来取得更好表现的一种集成学习模型。一般情况下,Stacking模型分为两层。第一层中我们训练多个不同的模型,然后再以第一层训练的各个模型的输出作为输入来训练第二层的模型,以得到一个最终的输出。为了更加详细的阐述stacking模型的训练和预测过程,我们用下面的图作为示例。

 

首先,我们从stacking模型的训练开始阐述。在上图中我们可以看到,该模型的第一层有五个分类模型,第二层有一个分类模型。在第一层中,对于不同的分类模型,我们分别将训练数据分为 5 份,接下来迭代5次。每次迭代时,将 4 份数据作为训练集对每个分类模型进行训练,然后剩下一份数据在训练好的分类模型上进行预测并且保留结果。当5次迭代都完成以后,我们就获得了一个结果矩阵。该矩阵是一个N*1的矩阵,N是训练集的样本数。当5个模型都进行完上述操作后,我们就可以得到一个N*5的结果矩阵。然后将该矩阵导入到第二层的模型6中进行训练,此时全部模型训练完毕。接下来是stacking模型的预测过程。



接下来我们开始阐述该模型的预测过程。在第一层中,对于不同分类模型,我们还是使用在训练时分成的5份训练数据进行五次迭代。每次迭代时,我们利用训练后的分类模型对预测集进行预测并保留下来。当5次迭代都完成以后,我们可以得到一个M*5的矩阵,M是预测集的样本数。 我们将这个矩阵按列取平均,缩减成M*1的矩阵。当5个模型都进行完上述操作后,我们就可以得到一个M*5的结果矩阵。然后将该矩阵导入到第二层中训练好的模型6进行预测,就可以得到最终的预测结果。
在介绍完经典stacking模型的训练及预测过程后,接下来阐述我们自己的stacking模型构建和改进。

 

在预测过程中,流程和训练过程相似,只是改成了用预测集在训练好的分类模型上进行预测。我们注意到,在Stacking模型中,由于在第一层的预测过程也需要使用第一层时的数据划分,所以一般Stacking模型的运行顺序是:

1. 第一层训练

2. 第一层预测

3. 第二层训练

4. 第二层预测

至此,我们改进后的stacking模型介绍完毕。

下面谈一下自己使用过程中的感受吧。

1. sklearn中也是有集成模型的。但是他只有boosting和bagging的集成模型代码。可能还是因为stacking模型的灵活性太高了。

2. 我们在第一层的模型选择上,主要是考虑到了速度问题,所以选取的都是一些线性分类器和速度比较快的线性核svm等。第二层我们使用的是rbf核SVM。但是在第二层的特征数由于加入了词向量特征而变大后,第二层的训练预测时间变得很长。所以SVM好,但是使用需谨慎。

3. 对于xgboost模型,我们在和svm比较后,发现比不过svm分类器。同时xgboost的调参也是一个蛮长的贪心过程。所以我们没有使用xgboost。但是在答辩中,前几名的大神在集成模型上几乎都用到了xgboost。这也说明xgboost的效果还是非常好的。

4. stacking模型理论上可以扩大到无数层。但是在答辩过程中,发现大家都是只使用了两层,同时我们也实验了搭出三层的stacking,效果也不如两层的。

5. 在一开始的时候,我们只在第一层中放入了四个分类器,但是受到了一些博客的影响,我们开始尝试加入更多的分类器。第一种是不同类型的分类器,但是更多的是同类型,但是不同参数下的分类器。我们发现,分类器越多时,最终效果更好。但是随着分类器的增多,效果提升的越来越少。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值