1.1、一般的目标函数:
Obj(Θ)=L(Θ)+Ω(Θ)(1.1.1)
L(Θ):损失函数,代表我们的模型有多拟合数据,Ω(Θ):正则化项,表示模型的复杂程度
这样目标函数的设计来自于统计学习里面的一个重要概念叫做Bias-variance tradeoff44。比较感性的理解,Bias可以理解为假设我们有无限多数据的时候,可以训练出最好的模型所拿到的误差。而Variance是因为我们只有有限数据,其中随机性带来的误差。目标中误差函数鼓励我们的模型尽量去拟合训练数据,这样相对来说最后的模型会有比较少的 bias。而正则化项则鼓励更加简单的模型。因为当模型简单之后,有限数据拟合出来结果的随机性比较小,不容易过拟合,使得最后模型的预测更加稳定。
1.2、对于tree ensemble,我们可以比较严格的把我们的模型写成是:
y^i=∑k=1Kfk(xi),fk∈F(1.2.1)
y^(t)i=∑k=1tfk(xi)=y^(t−1)i+ft(xi)(1.2.2)
k代表第k课树,最终的结果是K棵树结果的加和。
1.3、xgboost设计目标也包含上面的两部分:
Obj(t)==∑i=1nl(yi,y^(t)i)+∑t=1tΩ(fi)∑i=1nl(yi,y^(t−1)i+ft(xi))+Ω(ft)+constant(1.3.1)
找到ft来优化这一目标
当l为平方误差的情况下,这时候目标能改写成下面的二次函数:
Objt==∑i=1n(yi−(y^(t−1)i+ft(xi)))2+Ω(ft)+constant∑i=1n[2(y^(t−1)i−yi)ft(xi)+ft(xi)2]+Ω(ft)+constant
1.4、目标函数通过二阶泰勒展开变形
Obj(t)=∑i=1nl(yi,y^(t−1)i+ft(xi))+Ω(ft)+constant(1.4.1)
- 泰勒展开:
f(x+Δx)≃f(x)+f′(x)Δx+12f′′(x)Δx2
- 定义:
gi=∂y^(t−1)l(yi,y^(t−1)), hi=∂2y^(t−1)l(yi,y^(t−1))
l(yi,y^(t−1)i+ft(xi))其中yi每次都不变,l(yi,y^(t−1)i)→f(x)其中y^(t−1)i→x在f(x+Δx)中,ft(xi)→Δx
Obj(t)≃∑i=1n[l(yi,y^(t−1)i)+gift(xi)+12hif2t(xi)]+Ω(ft)+constant(1.4.2)
关于 ft的函数 在去除常数项后目标函数的形式如下:
∑i=1n[gift(xi)+12hif2t(xi)]+Ω(ft)(1.4.3)
gi=∂y^(t−1)l(yi,y^(t−1)), hi=∂2y^(t−1)l(yi,y^(t−1))
传统的GBDT可能大家可以理解如优化平法aa残差,但是这样一个形式包含可所有可以求导的目标函数。也就是说有了这个形式,我们写出来的代码可以用来求解包括回归,分类和排序的各种问题
2.1、树的复杂度
对于f的定义做一下细化,把树拆分成结构部分 q ,和叶子权重部分 w 。下图是个具体的例子,结构函数 q 把输入映射到叶子的索引号上,而 w 给定了每个索引号对应的叶子分数是什么。
ft(x)=wq(x),w∈RT,q:Rd→{1,2,....,T}(2.1.1)
T为叶子节点的总数目,这个复杂度包括了一棵树里面节点个数,以及每个树叶子节点上面输出分数的
L2 模平方。
2.2、求解总目标函数
每个叶子上面的样本集合 Ij={i|q(xi)=j},j={1,2,...T},j为叶子节点的id
Obj(t)≃==∑i=1n[gift(xi)+12hif2t(xi)]+Ω(ft)∑i=1n[giwq(xi)+12hiwq(xi)]+γT+λ12∑j=1Tw2j∑j=1T⎡⎣(∑i∈Ijgi)wj+12(∑i∈Ijhi+λ)w2j⎤⎦+γT(2.2.1)(2.2.2)(2.2.3)
Gj=∑i∈IjgiHj=∑i∈Ijhi(2.2.4)
把2.2.4带入2.2.3得:
Obj(t)=∑i=1T[Gjwj+12(Hj+λ)w2j]+λT(2.2.5)
一元二次方程求最小值(一阶导数为0)
w∗j=−GjHj+λ(2.2.6)
2.2.6带入2.2.5得:
Obj=−12∑j=1TG2jHj+λ+γT(2.2.7)
Gain=12[G2LHL+λ+G2RHR+λ−(Gl+GR)2HL+HR+λ]−γ(2.2.8)
G2LHL+λ:左子树分数,G2RHR+λ:右子树分数;(Gl+GR)2HL+HR+λ:不分割的分数;γ:新加入节点引入的复杂代价
参考文献
http://www.52cs.org/?p=429