机器学习13 GBDT

这一篇开始讲GBDT(梯度提升决策树), 根据上一篇可知,该模型每次学习的是损失函数的负梯度。所以基模型是回归树(因为每次都在拟合一个确定的值, 这和提升树不一样了,提升树中分类问题的基模型是二叉分类树)。正如提升树中所讲, GBDT可以用于回归问题,也可以用于分类问题。学习的流程和提升树是一致的,在确定损失函数后,只是基模型学习的目标不一样。最后的模型就是基模型的线性组合。

F表示组合的模型, f表示每次学习的模型, 首先我们定义一下损失函数  L(y,F_m(x)) = L(y, F_{m-1}(x) + \alpha_m f_m(x))

泰勒展开, 保留第一项, 得到L(y, F_m(x)) = L(y,F_{m-1}(x)) +f_m(x)\frac{\partial L(y,X)}{\partial X}_{|X=F_{m-1}(x)}

所以当f_m(x)  = -\alpha\frac{\partial L(y,X)}{\partial X}_{|X=F_{m-1}(x)}时, 损失函数会变小。


对于回归问题:

 损失函数可以是MSE,L(y,F_m(x)) = \frac{1}{2}(y-F_m(x))^2, 梯度是\frac{\partial L}{\partial X}_{|X=F_{m-1}(x)} = F_{m-1}(x) - y

损失函数还可以是绝对误差MAE,L(y,F_m(x)) = |(y-F(x)|, \frac{\partial L}{\partial X}_{|X=F_{m-1}(x)} = sign(y-F_{m-1}(x))

新的模型去拟合负梯度即可(对于MSE,拟合负梯度和拟合残差是一样的),和提升树一样的学习即可。


对于二分类问题:

损失函数L (y,F_m(x)) = log(1+e^{-yF_m(x)})

\frac{\partial L(y, F(x))}{\partial F(x)}_{|F(x) = F_{m-1}(x)}= \frac{-y}{1 + exp(yF_{m-1}(x))}

第m步的基模型拟合了m-1步之后的负梯度,

因此首先需要有第0个基模型, 

F_0(x)  =  \mathop{argmin}_{F}\sum_{x_i} log(1+e^{-y_iF(x_i)})

对F求偏导,\frac{\partial \sum_{x_i} log(1+e^{-y_iF(x_i)})}{\partial F} = \frac{-y_ie^{-y_iF(x_i)}}{1+e^{-y_iF(x_i)}} = 0

\Rightarrow \sum_{y_i=1}\frac{-e^{-F}}{1+e^{-F}} +\sum_{y_i=-1}\frac{e^F}{1+e^{F}} = 0

\Rightarrow \sum_{y_i=1}\frac{-1}{1+e^{F}} +\sum_{y_i=-1}\frac{e^F}{1+e^{F}} = 0

-m + ne^F = 0 \Rightarrow e^F=m/n = \frac{1 +\frac{m-n}{m+n}}{1-\frac{m-n}{m+n}} = \frac{1+\bar y}{1 - \bar y}

F_0 = log\frac{1+\bar y}{1 - \bar y}

m步拟合了负梯度之后,模型变成了 F_m(x) = F_{m-1}(x) + \alpha _mf_m(x) = F_{m-1}(x) + \alpha _m *(-\frac{\partial L(y, F_{m-1}(x)}{\partial F_{m-1}(x)})

= F_{m-1}(x) + \alpha _m *\frac{y}{1 + exp(yF_{m-1}(x))}

负梯度就是参数变化的方向,现在我们需要找到\alpha_{m},使得损失函数最小, 即

\alpha_{m} = \mathop{argmin}_{\alpha}\sum_{x_i}L(y_i,F_{m-1}(x_i) + \alpha f_m(x_i)) =  \mathop{argmin}_{\alpha}\sum_{x_i} log(1+e^{(-y_i(F_{m-1}(x_i)+\alpha f_m(x_i))})

我们不妨把  \alpha _mf_m(x)  定义成 \sum_{j=1}^Jc_{m,j}1(x \in R_{m,j}), 即第m个基模型的第j个划分空间值为c_{m,j}

所以第m个基模型求解变成了, c_{mj} = \mathop{argmin}_{c}\sum_{x_i \in R_{mj}}L(y_i,F_{m-1}(x_i) +c) =  \mathop{argmin}_{c}\sum_{x_i \in R_{mj}} log(1+e^{(-y_i(F_{m-1}(x_i)+c)})

这个优化问题非常难求, 这里用牛顿法做一个近似

f(c) = \sum_{x_i \in R_{mj}} log(1+e^{(-y_i(F_{m-1}(x_i)+c)})

f’(c) = \sum_{x_i\in R_{mj}} \frac{-y_i}{1 + exp(y_iF_{m-1}(x_i) +c)}

f’’(c) = \sum_{x_i\in R_{mj}} \frac{y_iexp(y_i(F_{m-1}(x_i) +c))}{(1 + exp(y_i(F_{m-1}(x_i) +c))^2}

c_{m,j} = c_0 - \frac{f’(c)}{f’’(c)}c_0 = 0

所以c_{mj} = \frac{\sum_{x_i\in R_{mj}}r_{m-1,i}}{\sum_{x_i\in R_{mj}}|r_{m-1,i}|(1-|r_{m-1,i}|)}, 其中 r_{m-1,i}是m-1步之后第i个样本的负梯度值,即r_{m-1,i} = \frac{y_i}{1 + exp(y_iF_{m-1}(x))}

即解出了 \alpha _mf_m(x)


多分类问题:

损失函数使用交叉熵损失函数, L(y,F_m(x)) = -\sum_{k=1}^Ky_klog(p_k(x)), 其中,p_k(x) = \frac{exp(f_k(x))}{\sum_{l=1}^K(f_l(x))}, 一共有K个二分类, 所以每一步都有k个基模型,一共有m*K个基模型。

\frac{\partial L(y,X)}{\partial X}_{|X=F_{l,m-1}(x)} = -y_{i,l} + p_{m-1,l}(x), 如果y_i是类别l的类, 则y_{i,l}  = 1, 不然为0

每一步都是k个二分类,F_k(x),

F_{m,l}(x) = F_{m-1,l}(x) + \alpha _{m,l}f_{m,l}(x) = F_{m-1,l}(x) + \alpha _{m,l} *(-\frac{\partial L(y, F_{m-1,l}(x)}{\partial F_{m-1,l}(x)})

同理,现在我们需要找到\alpha_{m,l} ,使得

\alpha_{m,l} = \mathop{argmin}_{\alpha}\sum_{x_i}L(y_i,F_{m-1,l}(x_i) + \alpha f_{m,l}(x_i))

同样把 \alpha _{m,l}f_{m,l}(x) 定义成\sum_{j=1}^Jc_{m,j,l}1(x \in R_{m,j,l})

c_{m,j,l} = \frac{K-1}{K} \frac{\sum_{x_i\in R_{m,j,l}}r_{m-1,i,l}}{\sum_{x_i\in R_{m,j,l}}|r_{m-1,i,l}|(1-|r_{m-1,i,l}|)}, 其中r_{m-1,i,l} = y_{i,l} - p_{l,m-1}(x_i), 即m-1步学习后,l类中第i个点的负梯度。

第m步学习就结束了


GBDT的介绍就到这里了,和提升树的不同就在于GBDT学习的是损失函数的负梯度,参数每次沿着负梯度前进一小步

在CTR预估中,会结合使用GBDT+LR, GBDT用来生成特征,增强LR模型的非线性能力。这一块读者可以查询相关的文章。

下一篇会介绍下一个Boosting模型,它在GBDT上又改进了一些内容,是一个大杀器。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351