• 机器学习——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))=(yf(x))2

    其中,f(x) 是强分类器,且当前强分类器 f m = f m − 1 + T m ( x , θ m ) f_m = f_{m-1}+T_m(x,θ_m) fm=fm1+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)=fm1(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,fm1(x))+əfm1(x)əL(y,fm1(x))[f(x)fm1(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,fm1(x))+əfm1(x)əL(y,fm1(x))[fm(x)fm1(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,fm1(x))=əfm1(x)əL(y,fm1(x))[fm(x)fm1(x)]

    其中 [ f m ( x ) − f m − 1 ( x ) ] = T ( x , θ m ) [f_m(x)-f_{m-1}(x)] = T(x,θ_m) [fm(x)fm1(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) əfm1(x)əL(y,fm1(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)=əfm1(x)əL(y,fm1(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) əfm1(x)əL(y,fm1(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)=əfm1(x)əL(y,fm1(x))=əfm1(x)ə(yfm1(x))2

    为了求解简洁美观,可以 令 L o s s 为 1 2 ( y − f ( x ) ) 2 令Loss为\frac{1}{2}(y-f(x))^2 Loss21(yf(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)=əfm1(x)əL(y,fm1(x))=əfm1(x)21ə(yfm1(x))2=yfm1(x)

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

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

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

  • 相关阅读:
    SpirngBoot实现文件上传功能——文件上传原理——Postman接口测试
    EasyExcel自定义处理器扩展指定行修改样式包括字体颜色
    如何查看笔记本电池健康度?(超级详细)
    【Java基础】字节缓冲流构造方法、字节流复制视频、字符流及编码表介绍
    MyBatis 中的 foreach 的用法
    前端性能优化:页面加载速度慢怎么办?
    Java的基础框架之MyBatisPlus(SpringBoot整合MyBatisPlus和乐观锁)
    人类的谋算与量子计算
    长安链可验证数据库,保证数据完整性的可信存证方案
    【opencv】传统图像识别:hog+svm实现图像识别详解
  • 原文地址:https://blog.csdn.net/weixin_50348308/article/details/132741289