GBDT+LR的工作原理?

  统计/机器学习 回归分析 监督式学习    浏览次数: 960
2

很多地方看到GDBT+LR的模型,据说很厉害。

工作原理到底是什么?是简单的将GBDT和LR进行stack吗?

 

niiii   2018-05-23 09:48



   4个回答 
22

简单地说,就是把gbdt的输出,作为logistic regression的输入,最后得到一个logistic regression模型。

例如,gbdt里有$3$棵树$T_1,T_2,T_3$,每棵树的叶节点个数为$4$,第$i$个树的第$j$个叶节点是$L_{i,j}$。

当gdbt训练完成之后,样本$X_1$在第一棵树中被分到了第$3$个叶节点上,也就是$L_{1,3}$,那么这个样本在$T_1$上的向量表达为$(0,0,1,0)$。

样本$X_1$在$T_2$被分到了$L_{2,1}$,那么$X_1$在$T_2$上的向量表达为$(1,0,0,0)$

样本$X_1$在$T_3$被分到了$L_{3,4}$,那么$X_1$在$T_3$上的向量表达为$(0,0,0,1)$

那么$X_1$在整个gbdt上的向量表达为

$$(0,0,1,0,1,0,0,0,0,0,0,1)$$

所以每个样本都会被表示为一个长度为12的0-1向量,其中有3个数值是1。

然后这类向量就是LR模型的输入数据。


sasa   2018-06-07 02:06

简洁明了 - 超越本人   2018-09-24 21:32
5

这个是现在广告业界的套路,好像叫什么ctr。

因为xgb等的梯度提升树训练过于复杂,而lr众所周知过于简单,只能发现线性过于简单,对于交互项和非线性关系没有辨识度,于是大佬们就开发一个新套路,用gbdt的训练数据,gbdt=梯度+树,基于树模型,就有了交叉和非线性,然后把叶子节点放到lr里,这不解决了lr的缺点。

当然,我并没有做过,所以就这样简单粗略说一下,等待大佬给出学术性专业回答。

ps:至于厉害不厉害,就不知道了,工业界比较厉害吧,毕竟谷歌阿里都在用,至于比赛的话,我就不晓得了,我还指望哪个大佬能指点一下我,最近瓶颈啊,完全不知道怎么清洗数据,每次搞完特征,发现还不如原特征往里面塞

陈十一   2018-05-23 10:01

5

简单来说是将GBDT中每棵树的叶节点作为一个新的特征(01变量,如果某样本落在该叶节点上就是1,否则为0)。可以在r中用xgboost的create.features函数手动玩一下。

s3040608090   2018-05-24 13:38

2

一棵树的叶节点把数据空间非线性的划分为 $2^d$个互不相交的子空间,$d$为树的深度。多棵树就有多种划分。这里把多棵树子空间的序号的one-hot编码组合作为输入数据$x$。$x_i=1$,表示数据点在第i个子空间。每一个子空间都是一个cluste。这个技术的关键思想是用是否在子空间的指示标签(binary indicator)代表子空间中的所有点,类似于kmeans中mean代表所有点的值。最后通过所有子空间的影响力的和算出$P(\hat{y}=1)$。

再看LR,$P(y=1)=\sigma(w^Tx)=\dfrac{1}{1+e^{-w^Tx}}$,如果logit $w^Tx$值越大,预测标签$y=1$的概率越大;如果$w^Tx$越小($w^Tx<0$),$y=0$的概率越大。在训练时,如果第i个子空间中$y=1$的数据点很多,相应的$w_i$会被训练成一个较大的正数。在预测时,如果$x_i=1$,则$w_ix_i=w_i$会贡献一个较大的logit,驱使$\hat{y}=1$的概率变大。如果$x_i=0$,$w_ix_i=0$对预测没影响。$w_i$可以看做第i个子空间对$P(y=1)$的影响力。

打个比方,小明上的小学,初中,高中,大学都是好学校,最后小明学习成绩好的概率就会高。其中小学的划分就是一棵树,初中是另外一棵树。新造的$x$就是所读学校的编号的组合。$w_i$就是第i个学校对学习成绩好的影响。

计算的链条是原始数据$x_0$-(GBDT)-> 新one-hot编码组合$x$->$w^Tx$->$P(y=1)=\sigma(w^Tx)$。

根据这个blog,原始数据加新造的one-hot编码组合(新特征),效果最好。


Zealing   2018-09-28 16:36



  相关主题

如果支持向量机做回归任务,支持向量是什么?   1回答

逻辑回归最终的所有结果都是0的原因   3回答

adaboost做回归预测的时候,是怎么调整样本权重的?   1回答

逻辑回归的前提假设是什么?   1回答

可以对线性回归进行boosting吗?   3回答

线性回归的bagging   2回答

python中可以做beta regression的包?   1回答

怎么处理真值大部分为0的回归问题   3回答

泊松回归的公式是什么?   1回答

逻辑回归模型中变量的系数怎么理解?   4回答

常用的回归模型中,哪些具有较好的鲁棒性(robustness)?   2回答

在线性回归模型中存在epoch的说法吗?   2回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!