多种模型融合策略

这篇博文主要参考了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棵树。
p=σ(ylr+ygbdt)       ylr=w.x+b
ygbdt=r1.ylr+Tt=2rt.ft(x) 其中 ft(x) 代表了gbdt中的第t棵树

7 DNN+GBDT
和上面的差不多,首先训练出一个DNN,然后把LR的预测分数和正确label之间的残差作为GBDT的输入,然后迭代训练出T棵树。
p=σ(ydnn+ygbdt)       ydnn=w.x+b
ygbdt=r1.ydnn+Tt=2rt.ft(x) 其中 ft(x) 代表了gbdt中的第t棵树

8 LR2DNN
首先训练出一个LR,然后把LR的分数和原来的特征一起作为DNN的输入特征。如图所示:
这里写图片描述
这里需要注意的是,position bias并没有和其他的feature cross在一起,说明了神经网络的构建并不一定都是全连接,我们也是选择性的把具有相关意义的特征cross在一起,这样构造的网络才更具有可解释性,如果把现实中的没有含义的特征强行cross在一起并不是明智的选择。也许传统的CNN就是这样构造出来的,只是把相邻的元素卷在了一起,因为只有相邻的元素是有意义的。这也就是为什么LR中的特征中不能同时出现类别特征和数值特征的原因吧。

需要注意的是,在DNN和LR等模型中在处理之前要对数值特征进行归一化预处理,之所以这样处理,这主要是方便后面的优化。一般来说在优化目标函数的时候,一般采用的是随机梯度下降策略,比方说对目标函数 Loss=w1x1+w2x2yi)2 进行优化的时候,如果不进行归一化预处理那么 w1 就更新为 w1=w1+αx12(w1x1+w2x2yi) ,其中 α 为学习速率,不难看出量纲大的变量往往拥有更大的步长。这是如果使用较小的学习速率去迎合量纲大的变量,就会使小量纲变量收敛速度太慢;如果使用较大的学习速率去迎合量纲小的变量,就会使大量纲变量步幅太大。这两者都会影响最终的优化结果,因此做归一化使得优化过程变得简单,更容易找到全局最优解。需要注意的是,并不是所有的机器学习算法都是需要归一化预处理的,我认为只有那些特征之间cross在一起的,具有上述不同量纲数据之间学习速率不一致问题的算法才需要,如果特征之间互相独立(比方说决策树类型)就不需要归一化操作了。

猜你喜欢

转载自blog.csdn.net/guoyuhaoaaa/article/details/77712878