题记
- Xgboost作为集成模型的一个代表,一直以优异的性能著称,很多Kaggle比赛的获奖者都非常偏爱使用这个模型。然而,这个模型背后的原理,却比一般的集成模型更为复杂和难以理解。 这次对Xgboost的推导过程和重点内容做一些整理,尽量通俗易懂,希望帮助大家更好地理解Xgboost。
学习残差
- Xgboost是一个由多个基模型构成的集成模型,每一个模型都在学习上一个模型的残差。因此,每多一棵树我们就离真实值更近了一步。最后,将所有模型的预测结果求和,作为最终的预测结果。
- 以上图为例,这次我们只看小boy,假设小boy的真实值为3,tree1的学习结果为2,则第二颗树是学习目标是真实值和预测值的差值(3-2)=1,而tree2学到了0.9。则最终对boy的预测值为2+0.9 = 2.9。是不是和真实值3非常接近?
- 关键点:
1.最终的预测值w,是由每颗树的结果求和得到的。
2.我们可以将一个预测结果拆分成 前面所有树的预测结果+新增树的预测结果
y ^ i ( t ) = ∑ k = 1 t f k ( x i ) = y ^ i ( t − 1 ) + f t ( x i ) \hat { y } _ { i } ^ { ( t ) } = \sum _ { k = 1 } ^ { t } f _ { k } \left( x _ { i } \right) = \hat { y } _ { i } ^ { ( t - 1 ) } + f _ { t } \left( x _ { i } \right) y^i(t)=k=1∑tfk(xi)=y^i(t−1)+ft(xi)
正则化项
- 为了避免过拟合的现象,我们从两个方面去约束Xgboost。
1.叶子节点个数 (避免树过于庞大)
2.对w进行L2正则化 (避免叶子节点上的值过分大和过分小)
Ω ( f t ) = γ T + 1 2 λ ∑ j = 1 T w j 2 \Omega \left( f _ { t } \right) = \gamma T + \frac { 1 } { 2 } \lambda \sum _ { j = 1 } ^ { T } w _ { j } ^ { 2 } Ω(ft)=γT+21λj=1∑Twj2
其中: T T T为一颗树上的叶子节点个数
w w w 为叶子节点的权重值(可以理解成预测)
γ \gamma γ 和 λ \lambda λ 为代表约束力度的系数 - 举例 计算正则化项 Ω \Omega Ω
目标函数
- 首先,我们想要优化的 目标函数 = 损失函数 l l l+正则化项 Ω \Omega Ω
O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t ) ) + ∑ i = 1 t Ω ( f i ) O b j ^ { ( t ) } = \sum _ { i = 1 } ^ { n } l \left( y _ { i } , \hat { y } _ { i } ^ { ( t ) } \right) + \sum _ { i = 1 } ^ { t } \Omega \left( f _ { i } \right) Obj(t)=i=1∑nl(yi,y^i(t))+i=1∑tΩ(fi) - 将t棵树的总预测分解成前面t-1棵的总预测和最新的t棵的预测两部分,并且补充上常数项,得到
O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) + constant O b j ^ { ( t ) } = \sum _ { i = 1 } ^ { n } l \left( y _ { i } , \hat { y } _ { i } ^ { ( t - 1 ) } + f _ { t } \left( x _ { i } \right) \right) + \Omega \left( f _ { t } \right) + \text { constant } Obj(t)=i=1∑nl(