机器学习——boosting之GBDT

现在要开始重点关注名字了,名字透漏了很多信息!名字暗藏线索!

GBDT,Gradient Boosting Decision Tree: 梯度提升决策树

果然信息很丰富

梯度:意味着计算有迭代递进关系,但还不明确是怎么迭代递进的

提升:意味着前向分布式+加法模型,并且分类器之间是有相关提升的

决策树:CART决策树、C4.5、忘记名字了...

em...还是要再深挖深挖,小小的boosting,挖呀挖呀挖呀挖。。。

经过推导。。。发现,我的GBDT回归,实际就是上一篇提升树的二叉回归树...

看来可以省点儿功夫,不写代码,但可以稍微推导一下

首先,明确回归问题采用平方损失函数: L o s s ( y , f ( x ) ) = ( y − f ( x ) ) 2 Loss(y,f(x)) =(y-f(x))^2 Loss(y,f(x))=(y−f(x))2

其中,f(x) 是强分类器,且当前强分类器 f m = f m − 1 + T m ( x , θ m ) f_m = f_{m-1}+T_m(x,θ_m) fm=fm−1+Tm(x,θm)

问题来了,我们现在要求Loss最小,原本是可以直接使Loss对x求导,进而求出θ,得到强分类器的

但书上说了,有时候Loss对x求导,是无法实现的,说实话,我不知道为什么

不过,不妨碍我对GBDT进行推导

首先,梯度,是想要Loss成梯度逐步下降,那就采用让Loss在 f ( x ) = f m − 1 ( x ) f(x)=f_{m-1}(x) f(x)=fm−1(x)处进行一阶泰勒展开

则有 L o s s ( y , f ( x ) ) = L o s s ( y , f m − 1 ( x ) ) + ə L ( y , f m − 1 ( x ) ) ə f m − 1 ( x ) ∗ [ f ( x ) − f m − 1 ( x ) ] Loss(y,f(x)) = Loss(y,f_{m-1}(x))+\frac{ə_{L(y,f_{m-1}(x))}}{ə_{f_{m-1}(x)}}*[f(x)-f_{m-1}(x)] Loss(y,f(x))=Loss(y,fm−1(x))+əfm−1(x)əL(y,fm−1(x))∗[f(x)−fm−1(x)]

令 f ( x ) = f m ( x ) f(x) = f_m(x) f(x)=fm(x),则有

L ( y , f m ( x ) ) = L ( y , f m − 1 ( x ) ) + ə L ( y , f m − 1 ( x ) ) ə f m − 1 ( x ) ∗ [ f m ( x ) − f m − 1 ( x ) ] L(y,f_m(x)) = L(y,f_{m-1}(x))+\frac{ə_{L(y,f_{m-1}(x))}}{ə_{f_{m-1}(x)}}*[f_m(x)-f_{m-1}(x)] L(y,fm(x))=L(y,fm−1(x))+əfm−1(x)əL(y,fm−1(x))∗[fm(x)−fm−1(x)]

Δ L o s s = L ( y , f m ( x ) ) − L ( y , f m − 1 ( x ) ) = ə L ( y , f m − 1 ( x ) ) ə f m − 1 ( x ) ∗ [ f m ( x ) − f m − 1 ( x ) ] ΔLoss = L(y,f_m(x)) - L(y,f_{m-1}(x))=\frac{ə_{L(y,f_{m-1}(x))}}{ə_{f_{m-1}(x)}}*[f_m(x)-f_{m-1}(x)] ΔLoss=L(y,fm(x))−L(y,fm−1(x))=əfm−1(x)əL(y,fm−1(x))∗[fm(x)−fm−1(x)]

其中 [ f m ( x ) − f m − 1 ( x ) ] = T ( x , θ m ) [f_m(x)-f_{m-1}(x)] = T(x,θ_m) [fm(x)−fm−1(x)]=T(x,θm)

要使下一次迭代时,Loss降低,则需要ΔLoss<0,那么对应的 ə L ( y , f m − 1 ( x ) ) ə f m − 1 ( x ) ∗ T ( x , θ m ) \frac{ə_{L(y,f_{m-1}(x))}}{ə_{f_{m-1}(x)}}*T(x,θ_m) əfm−1(x)əL(y,fm−1(x))∗T(x,θm)<0

那么,当 T ( x , θ m ) = − ə L ( y , f m − 1 ( x ) ) ə f m − 1 ( x ) T(x,θ_m)=-\frac{ə_{L(y,f_{m-1}(x))}}{ə_{f_{m-1}(x)}} T(x,θm)=−əfm−1(x)əL(y,fm−1(x))时,就可以保证 ə L ( y , f m − 1 ( x ) ) ə f m − 1 ( x ) ∗ T ( x , θ m ) \frac{ə_{L(y,f_{m-1}(x))}}{ə_{f_{m-1}(x)}}*T(x,θ_m) əfm−1(x)əL(y,fm−1(x))∗T(x,θm)<0

因此, T ( x , θ m ) = − ə L ( y , f m − 1 ( x ) ) ə f m − 1 ( x ) = ə ( y − f m − 1 ( x ) ) 2 ə f m − 1 ( x ) T(x,θ_m)=-\frac{ə_{L(y,f_{m-1}(x))}}{ə_{f_{m-1}(x)}}=\frac{ə_{(y-f_{m-1}(x))^2}}{ə_{f_{m-1}(x)}} T(x,θm)=−əfm−1(x)əL(y,fm−1(x))=əfm−1(x)ə(y−fm−1(x))2

为了求解简洁美观,可以 令 L o s s 为 1 2 ( y − f ( x ) ) 2 令Loss为\frac{1}{2}(y-f(x))^2 令Loss为21(y−f(x))2

这样 T ( x , θ m ) = − ə L ( y , f m − 1 ( x ) ) ə f m − 1 ( x ) = 1 2 ə ( y − f m − 1 ( x ) ) 2 ə f m − 1 ( x ) = y − f m − 1 ( x ) T(x,θ_m)=-\frac{ə_{L(y,f_{m-1}(x))}}{ə_{f_{m-1}(x)}}=\frac{\frac{1}{2}ə_{(y-f_{m-1}(x))^2}}{ə_{f_{m-1}(x)}}=y-f_{m-1}(x) T(x,θm)=−əfm−1(x)əL(y,fm−1(x))=əfm−1(x)21ə(y−fm−1(x))2=y−fm−1(x)

哦!这不就是残差嘛 r = y − f m − 1 ( x ) r = y-f_{m-1}(x) r=y−fm−1(x) ,相当于每个新的弱分类器(准确来说,应该是基函数)都应该尽可能地去拟合残差

所以啊!!!!实际上一轮的提升树,本质上就是GBDT

不管,就先这么确定,以后打脸再说...好困

相关推荐
说私域12 分钟前
基于开源链动2+1模式AI智能名片S2B2C商城小程序的社群运营创新研究
人工智能·小程序·开源
程序员小灰15 分钟前
谷歌AI模型Gemini 3.0 Pro,已经杀疯了!
人工智能·aigc·gemini
杨浦老苏24 分钟前
AI驱动的图表生成器Next-AI-Draw.io
人工智能·docker·ai·群晖·draw.io
饭饭大王66635 分钟前
深度学习在计算机视觉中的最新进展
人工智能·深度学习·计算机视觉
John_ToDebug36 分钟前
浏览器内核的“智变”:从渲染引擎到AI原生操作系统的征途
人工智能·chrome
用户48021517024737 分钟前
Transformer 的技术层面
人工智能
std787939 分钟前
Intel Arrow Lake Refresh迎来DDR5‑7200 CUDIMM支持,提升内存兼容性
人工智能
小喵要摸鱼40 分钟前
【卷积神经网络】卷积层、池化层、全连接层
人工智能·深度学习·cnn
vvoennvv2 小时前
【Python TensorFlow】 TCN-GRU时间序列卷积门控循环神经网络时序预测算法(附代码)
python·rnn·神经网络·机器学习·gru·tensorflow·tcn
YJlio2 小时前
[编程达人挑战赛] 用 PowerShell 写了一个“电脑一键初始化脚本”:从混乱到可复制的开发环境
数据库·人工智能·电脑