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=−l0′l0′′ Δ y i = − l 0 ′ l 0 ″
加入正则化以后形式上会与上式有所不同.
之后我们以 Δyi Δ y i 为标签再训练一棵树使得 Δyi≈tree_delta(x⃗ i) Δ y i ≈ t r e e _ d e l t a ( x → i ) ,为了拟合 Δyi Δ y i 于是设计了打分函数,那么 打分函数怎么来, 把 Δyi=−l0′l0′′ Δ y i = − l 0 ′ l 0 ″ 带入到那个抛物线就能出奇迹:
l−l0=12l0′2l0′′ l − l 0 = 1 2 l 0 ′ 2 l 0 ″
这个式子两边加负号以后就能反映损失函数的减少的程度, 所以把
−l0′2l0′′ − l 0 ′ 2 l 0 ″ 叫做分(score), 分越高越好, 计算
l0′2 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的主要思想.