这篇博文主要参考了2017 年的WWW的paper《Model Ensemble for Click Prediction in Bing Search Ads》。虽然这里的model ensemble用到的场景是点击预测,但是其中的思想可以用在任意的使用机器学习的场景。
首先要说的是,这篇文章里介绍的模型融合策略是基于GBDT(XGBOOST)、DNN和LR这三种基本的分类器。(其实在实战中用的最多的也就是这三种分类器了,同时不难看出LR等效于没有隐藏层且输出层维度为1的DNN)。
同时需要注意的是,这篇paper里用到的DNN只包含了一层隐层单元,论文里的解释是虽然多层的DNN能够显著的提升线下的成绩,但是可能容易造成过拟合,导致线上成绩很烂(这只是paper中的看法,我认为我们不能照搬,在实战中还是要多试试多层网络的,毕竟多层网络的表征能力更强)。
下面就来讲解几种常见的融合方法:
1 GBDT2LR
首先使用GBDT对原始数据进行处理,对原始数据进行特征转换,“treat each individual tree as a categorical feature that takes as feature value the index of the leaf where a sample falls in.”,最后每一棵树都可以看成是一种one-hot feature,最后把所有树的one-hot 集合起来作为LR的输入。
2 LR2GBDT
首先训练出LR,然后把LR预测数的分数和原来样本的特征一起作为GBDT的输入特征。
3 GBDT2DNN
首先训练出GBDT,把GBDT的预测分数和原来的样本特征一起作为DNN的输入特征。
4 DNN2GBDT
首先训练出DNN,把DNN的预测分数和原来的特征一起作为GBDT的输入特征。
5 GBDT+DNN
分别使用原来的训练数据训练出GBDT和DNN,然后对两者的结果取平均作为最后的预测分数。
6 LR+GBDT
首先训练出一个LR,然后把LR的预测分数和正确label之间的残差作为GBDT的输入,然后迭代训练出T棵树。
7 DNN+GBDT
和上面的差不多,首先训练出一个DNN,然后把LR的预测分数和正确label之间的残差作为GBDT的输入,然后迭代训练出T棵树。
8 LR2DNN
首先训练出一个LR,然后把LR的分数和原来的特征一起作为DNN的输入特征。如图所示:
这里需要注意的是,position bias并没有和其他的feature cross在一起,说明了神经网络的构建并不一定都是全连接,我们也是选择性的把具有相关意义的特征cross在一起,这样构造的网络才更具有可解释性,如果把现实中的没有含义的特征强行cross在一起并不是明智的选择。也许传统的CNN就是这样构造出来的,只是把相邻的元素卷在了一起,因为只有相邻的元素是有意义的。这也就是为什么LR中的特征中不能同时出现类别特征和数值特征的原因吧。
需要注意的是,在DNN和LR等模型中在处理之前要对数值特征进行归一化预处理,之所以这样处理,这主要是方便后面的优化。一般来说在优化目标函数的时候,一般采用的是随机梯度下降策略,比方说对目标函数