|
本帖最后由 Happy清子 于 2019-10-25 00:44 编辑
今天我们就来谈谈模型融合中比较常见的一种方法——stacking。翻译成中文叫做模型堆叠,接下来我们就来了解下,此法到底如何将模型做堆叠从而提升模型效果的。
stacking具体流程我们就对着下图(两层的stacking)来详细描述一下如何做模型stacking:
- 首先将数据分为5份,
- 在stacking的第一层定义5个基模型[model_1 ,model_2,model_3,model_4,model_5],其中每个模型选择做一下5折的交叉验证的预测,这样就相当于每个模型将所有数据预测了一遍,举个例子,最终每一个训练数据会被转换为[1,1,1,1,0]形状,维度为5的向量。
- 将第一层5个基模型的输出预测向量[1,1,1,1,0],作为第二层模型model_6的特征做训练,
- 做test时,直接将test的数据喂给之前第一层训练好的5个基模型,5个模型预测出的至平均后作为第二层模型的输入。
大家可以简单的将stacking的第一层模型理解成一个超强的特征转换层。
stacking
Stacking注意事项做Stacking模型融合时需要注意以下个点,我们拿2层stacking模型融合来举例子:
- 第一层的基模型最好是强模型,而第二层的基模型可以放一个简单的分类器,防止过拟合。
- 第一层基模型的个数不能太小,因为一层模型个数等于第二层分类器的特征维度。大家可以把勉强将其想象成神经网络的第一层神经元的个数,当然这个值也不是越多越好。
- 第一层的基模型必须准而不同",如果有一个性能很差的模型出现在第一层,将会严重影响整个模型融合的效果(笔者在实验过程中就遇到这样的坑)。
通过上述的描述,大家没有发现其实2层的stacking 其实和两层的神经网络有些相像,只不过stacking将神经网络第一层的神经元换成了强大的机器学习模型。
实验结果
结语确实Stacking集成模型后,模型的性能有了提升,同时笔者说说实验过程中遇的坑,之前的笔者在Stacking第一层放了一个Logistic回归模型,其本身的性能就不好,最终导致Stacking的效果反而变差,所以一定要记住,Stacking前面层的模型性能一定要强,还是类比神经网络,特征提取网络(NLP领域的:Tansformer,图像领域的:Resnet)一定要强,这样才能产生好的效果。做完整个实验,笔者感悟到:Stacking貌似做的还是特征转换,或者叫表示学习。
|
|