通俗易懂的Xgboost原理推导

xgboost是回归树的集成,关于回归树可以参考之前写的最小二乘回归树:
https://blog.csdn.net/u013648367/article/details/73194537

通常情况下, 机器学习的目标任务是最小化损失函数. 损失函数通常会有如下的形式:

loss=il(yi^,yi)+Regularization l o s s = ∑ i l ( y i ^ , y i ) + R e g u l a r i z a t i o n ​

为了突出重点, 这里不考虑正则化项, 一开始我们会通过损失函数训练得到一棵回归树, 这样对于每一个样本 x⃗ i x → i 的输入都会有一个模型输出 y^i y ^ i , 即 tree(0)(xi)=y^i t r e e ( 0 ) ( x i ) = y ^ i . 问题在于一开始我们的损失函数不会太小, 我们希望损失函数能够进一步下降, 如果能找到一个 Δyi Δ y i , 使得 l(yi^+Δyi,yi)<l(yi^,yi) l ( y i ^ + Δ y i , y i ) < l ( y i ^ , y i ) ​ 就好了.

假如我们并不知道损失函数 l l 的具体形式, 但是如果 l l 存在二阶导数, 可以用泰勒展开近似成:

l(yi^+Δyi,yi)=l(yi^,yi)+Δyidl(yi^,yi)dy^i+12(Δyi)2d2l(yi^,yi)dy^2i+o((Δyi)2) l ( y i ^ + Δ y i , y i ) = l ( y i ^ , y i ) + Δ y i d l ( y i ^ , y i ) d y ^ i + 1 2 ( Δ y i ) 2 d 2 l ( y i ^ , y i ) d y ^ i 2 + o ( ( Δ y i ) 2 )

简单记为:
l(yi^+Δyi,yi)=l0+Δyil0+12(Δyi)2l0′′+o((Δyi)2) l ( y i ^ + Δ y i , y i ) = l 0 + Δ y i l 0 ′ + 1 2 ( Δ y i ) 2 l 0 ″ + o ( ( Δ y i ) 2 )

略去高阶项以后可以发现这是一个抛物线, 如果损失函数 l l 的二阶导不为负, 这个抛物线就有最小值. 根据抛物线相关知识, 在最小值的地方有:
Δyi=l0l0′′ Δ y i = − l 0 ′ l 0 ″

加入正则化以后形式上会与上式有所不同.

之后我们以 Δyi Δ y i 为标签再训练一棵树使得 Δyitree_delta(x⃗ i) Δ y i ≈ t r e e _ d e l t a ( x → i ) ,为了拟合 Δyi Δ y i 于是设计了打分函数,那么 打分函数怎么来, 把 Δyi=l0l0′′ Δ y i = − l 0 ′ l 0 ″ 带入到那个抛物线就能出奇迹:

ll0=12l02l0′′ l − l 0 = 1 2 l 0 ′ 2 l 0 ″

这个式子两边加负号以后就能反映损失函数的减少的程度, 所以把 l02l0′′ − l 0 ′ 2 l 0 ″ 叫做分(score), 分越高越好, 计算 l02 l 0 ′ 2 l0′′ l 0 ″ 的时候是通过计算叶子节点所包含的样本取平均得到的, 但由于是个比值关系,直接对叶子节点所包含的样本进行导数计算并求和即可,而且通过专门设计的正则化项可以得到原文中的
H2G+λ − H 2 G + λ

所以在选取分裂特征点的时候要计算:
Gain=score()+score()score() G a i n = s c o r e ( 左 子 树 ) + s c o r e ( 右 子 树 ) − s c o r e ( 不 分 裂 )

枚举完所有可能的分裂点以后, 我们选 Gain G a i n 最大的分裂点进行分裂, 从而实现树的生长.最后得到新的树模型以后与之前的模型进行叠加即可, 这里有一点需要注意的是, 我们用泰勒展开对损失函数进行了抛物线近似, 这里要求 Δyi Δ y i 不能太大, 如果 Δyi Δ y i 太大, 截断误差会很大, 就不能达到近似的效果, 再加上考虑过拟合的因素, 需要引入一个松弛因子 η η , 模型叠加的时候不是直接采用:
tree(1)=tree(0)+tree_delta t r e e ( 1 ) = t r e e ( 0 ) + t r e e _ d e l t a

而是采用:
tree(1)=tree(0)+ηtree_delta t r e e ( 1 ) = t r e e ( 0 ) + η ⋅ t r e e _ d e l t a

重复以上过程, 就能得到最终模型 tree(t) t r e e ( t ) , 以上就是xgboost的主要思想.

你可能感兴趣的:(回归树,机器学习)