GBDT源码解读及实现(二)

以下是用回归树模拟实现GBDT

这是gbdt的第一棵树

这里写图片描述

这里写图片描述
这里写图片描述

对比两张图可以看出分割节点一样,但是叶子节点的value不同

下面是更新GBDT的树的value过程
这里写图片描述
如上图函数说明,叶子节点的value不是回归树的叶节点残差的平均值。
观察上面注释, s u m ( w ∗ ( y − p r o b ) ) / s u m ( w ∗ p r o b ∗ ( 1 − p r o b ) ) sum(w * (y-prob)) / sum(w* prob*(1-prob)) sum(w(yprob))/sum(wprob(1prob))在不考虑样本权重情况下,对于损失函数 L = c r o s s E n t r o p y = − ∑ y l o g ( p ) + ( 1 − y ) l o g ( 1 − p ) L= crossEntropy = - \sum y log(p) +(1-y)log(1-p) L=crossEntropy=ylog(p)+(1y)log(1p),其中 p = 1 1 + e − x p=\frac{1}{1+e^{-x}} p=1+ex1 ∂ L ∂ x = ∂ L ∂ p ∂ p ∂ x = − ∑ ( y − p ) \frac{\partial L}{\partial {x}}=\frac{\partial L}{\partial {p}}\frac{\partial p}{\partial {x}}=-\sum(y-p) xL=pLxp=(yp) ∂ 2 L ∂ x = ∑ p ( 1 − p ) \frac{\partial^2 L}{\partial {x}}=\sum p(1-p) x2L=p(1p) ,即y-prob是梯度,prob*(1-prob)是其二阶导hessian。更新的叶节点 w j ∗ = − G j H j w_j^* =-\frac{G_j}{H_j} wj=HjGj。那这里不就是和xgboost的树 w j ∗ = − G j H j + λ w_j^* =-\frac{G_j}{H_j+\lambda} wj=Hj+λGj差不多吗,就是少了正则化系数 λ \lambda λ 而已。还有,上面也可以看做对叶节点取一个权重------二阶导的倒数 。

在不考虑样本权重的情况下第一棵树更新后的值=∑(residual)/∑(logit(y_pred)*(1-logit(y_pred)))

注意:y_pred=log(pos/neg),prob=logit(y_pred)=pos/(pos+neg)=prior

这里写图片描述
第二棵树:

gbdt 生成:
这里写图片描述

下面是模拟生成:
第二棵树需要拟合的残差:上面更新后的树value*学习率+初始值log(pos/neg),然后取logit,最后用y减去logit后的值。其实梯度提升树拟合残差,就是拟合梯度(y-prob),使得每个叶子节点值变化都是在梯度方向上
这里写图片描述
这里写图片描述

第二棵树的y_pred2=第一棵树的y_pred1+value(from gbdt)*learning_rate,第二棵树的residual就是y_test - 1/(1+exp(-y_pred2))

另外,逻辑回归损失函数表示为 c r o s s E n t r o p y crossEntropy crossEntropy,也可以用对数损失函数表示为 L ( y , f ( x ) ) = l o g ( 1 + e x p ( − y f ( x ) ) ) L(y,f(x))=log(1+exp(−yf(x))) L(y,f(x))=log(1+exp(yf(x))),不过不同的是这里的 f ( x ) f(x) f(x)未经过 l o g i t logit logit转换,举例 y = 1 y=1 y=1时交叉熵损失函数 − l o g p , 其 中 p = 1 1 + e x p ( − f ( x ) ) -log p, 其中p=\frac{1}{1+exp(-f(x))} logp,p=1+exp(f(x))1,交叉熵转换为 l o g ( 1 + e x p ( − f ( x ) ) ) log(1+exp(−f(x))) log(1+exp(f(x))),和对数损失函数相等。
可参考:刘建平老师的博客xgboostgbdt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值