XGBOOST算法完整推论

X G B O O S T XGBOOST XGBOOST


ID3:

信息增益(information gain)
G a i n ( D , a ) = E n t ( D ) − ∑ v = 1 V ∣ D v ∣ ∣ D ∣ E n t ( D v ) ( 1 ) Gain(D,a)=Ent(D)-\sum_{v=1}^V\dfrac{|D^v|}{|D|}{Ent(D^v)}\quad\quad(1) Gain(D,a)=Ent(D)v=1VDDvEnt(Dv)(1)
其中: E n t ( D ) = − ∑ k = 1 y P k l o g 2 P k Ent(D)=-\sum_{k=1}^y{P_klog_2P_k} Ent(D)=k=1yPklog2Pk也称为熵。
\quad\quad 决策树的本质是训练数据集中归纳出一组分类规则,我们需要的是一个训练数据矛盾较小的决策树,同时具有很好的泛化能力。 E n t ( D ) Ent(D) Ent(D)的值越小,则 D D D的训读就越高,熵表示随机变量不确定性的度量。
表 一 : 贷 款 申 请 样 本 数 据 表 表一:贷款申请样本数据表

ID 年龄 有工作 有自己房子 信贷情况 类别
1 青年 一般
2 青年
3 青年
4 青年 一般
5 青年 一般
6 中年 一般
7 中年
8 中年
9 中年 非常好
10 中年 非常好
11 老年 非常好
12 老年
13 老年
14 老年 非常好
15 老年 一般

例题一:计算上述个样本的信息增益
H ( D ) = − 9 15 l o g 2 9 15 − 6 15 l o g 2 6 15 = 0.971 H(D)=-\dfrac{9}{15}log_2\dfrac{9}{15}-\dfrac{6}{15}log_2\dfrac{6}{15}=0.971 H(D)=159log2159156log2156=0.971

g ( D , A 1 ) = H ( D ) − [ 5 15 H ( D 1 ) + 5 15 H ( D 2 ) + 5 15 H ( D 3 ) ] g(D,A_1)=H(D)-[\dfrac{5}{15}H(D_1)+\dfrac{5}{15}H(D_2)+\dfrac{5}{15}H(D_3)] g(D,A1)=H(D)[155H(D1)+155H(D2)+155H(D3)]

\quad\quad\quad\quad = 0.971 − [ 5 15 ( − 2 5 l o g 2 2 5 ) − 3 5 l o g 2 3 5 ) =0.971-[\dfrac{5}{15}(-\dfrac{2}{5}log_2\dfrac{2}{5})-\dfrac{3}{5}log_2\dfrac{3}{5}) =0.971[155(52log252)53log253)

\quad\quad\quad\quad\quad\quad\quad\quad + 5 15 ( − 3 5 l o g 2 3 5 ) − 2 5 l o g 2 2 5 ) +\dfrac{5}{15}(-\dfrac{3}{5}log_2\dfrac{3}{5})-\dfrac{2}{5}log_2\dfrac{2}{5}) +155(53log253)52log252)

\quad\quad\quad\quad\quad\quad\quad\quad + 5 15 ( − 4 5 l o g 2 4 5 ) − 1 5 l o g 2 1 5 ) ] +\dfrac{5}{15}(-\dfrac{4}{5}log_2\dfrac{4}{5})-\dfrac{1}{5}log_2\dfrac{1}{5})] +155(54log254)51log251)]

\quad\quad\quad\quad = 0.971 − 0.888 =0.971-0.888 =0.9710.888
\quad\quad\quad\quad = 0.083 =0.083 =0.083
g ( D , A 2 ) = H ( D ) − [ 5 15 H ( D 1 ) + 10 15 H ( D 2 ) ] g(D,A_2)=H(D)-[\dfrac{5}{15}H(D_1)+\dfrac{10}{15}H(D_2)] g(D,A2)=H(D)[155H(D1)+1510H(D2)]
\quad\quad\quad\quad\quad = 0.971 − 0.647 =0.971-0.647 =0.9710.647
\quad\quad\quad\quad\quad = 0.324 =0.324 =0.324
g ( D , A 3 ) = H ( D ) − [ 6 15 H ( D 1 ) + 9 15 H ( D 2 ) ] g(D,A_3)=H(D)-[\dfrac{6}{15}H(D_1)+\dfrac{9}{15}H(D_2)] g(D,A3)=H(D)[156H(D1)+159H(D2)]

\quad\quad\quad\quad\quad = 0.971 − 0.551 =0.971-0.551 =0.9710.551
\quad\quad\quad\quad\quad = 0.420 =0.420 =0.420
g ( D , A 4 ) = H ( D ) − [ 4 15 H ( D 1 ) + 6 15 H ( D 2 ) + 5 15 H ( D 3 ) ] g(D,A_4)=H(D)-[\dfrac{4}{15}H(D_1)+\dfrac{6}{15}H(D_2)+\dfrac{5}{15}H(D_3)] g(D,A4)=H(D)[154H(D1)+156H(D2)+155H(D3)]

\quad\quad\quad\quad\quad = 0.971 − 0.608 =0.971-0.608 =0.9710.608
\quad\quad\quad\quad\quad = 0.363 =0.363 =0.363

C4.5:

\qquad 特征A对训练数据集D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A)定义为其信息增益 g ( D , A ) g(D,A) g(D,A)与训练数据集D关于特征A的值的熵 H A ( D ) H_A(D) HA(D)之比即: g a i n R a t i o ( D , A ) = g ( D , A ) H A ( D ) ( 2 ) gainRatio(D,A)=\frac{g(D,A)}{H_A(D)}\quad\quad(2) gainRatio(D,A)=HA(D)g(D,A)(2)
其中: H A ( D ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ l o g 2 ∣ D i ∣ ∣ D ∣ H_A(D)=\sum_{i=1}^n\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|} HA(D)=i=1nDDilog2DDi
例如:对年龄求 H A ( D ) H_A(D) HA(D)
H A 1 ( D ) = − 5 15 ( − 2 5 l o g 2 5 − 3 5 l o g 3 5 ) H_{A_1}(D)=-\dfrac{5}{15}(-\dfrac{2}{5}log\dfrac{2}{5}-\dfrac{3}{5}log\dfrac{3}{5}) HA1(D)=155(52log5253log53)

   = − 5 15 ( − 3 5 l o g 3 5 − 2 5 l o g 2 5 ) \quad\quad\quad\quad=-\dfrac{5}{15}(-\dfrac{3}{5}log\dfrac{3}{5}-\dfrac{2}{5}log\dfrac{2}{5}) =155(53log5352log52)

   = − 5 15 ( − 4 5 l o g 4 5 − 1 5 l o g 1 5 ) \quad\quad\quad\quad=-\dfrac{5}{15}(-\dfrac{4}{5}log\dfrac{4}{5}-\dfrac{1}{5}log\dfrac{1}{5}) =155(54log5451log51)

   = 0.888 \quad\quad\quad\quad=0.888 =0.888
g a i n R a t i o ( D , A 1 ) = g ( D , A 1 ) H A 1 ( D ) = 0.083 0.888 = 0.093 gainRatio(D,A_1)=\dfrac{g(D,A_1)}{H_{A1}(D)}=\dfrac{0.083}{0.888}=0.093 gainRatio(D,A1)=HA1(D)g(D,A1)=0.8880.083=0.093

同理: g a i n R a t i o ( D , A 2 ) = 0.324 0.647 = 0.501 gainRatio(D,A_2)=\dfrac{0.324}{0.647}=0.501 gainRatio(D,A2)=0.6470.324=0.501

g a i n R a t i o ( D , A 3 ) = 0.420 0.551 = 0.762 \quad\quad gainRatio(D,A_3)=\dfrac{0.420}{0.551}=0.762 gainRatio(D,A3)=0.5510.420=0.762

g a i n R a t i o ( D , A 4 ) = 0.363 0.608 = 0.597 \quad\quad gainRatio(D,A_4)=\dfrac{0.363}{0.608}=0.597 gainRatio(D,A4)=0.6080.363=0.597
\quad 增益率准则对可取值数目较少的属性有所偏好,因此C4.5算法并不是直接选取增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益最高的。
剪枝
\quad 预剪枝:在决策树生成过程过程中,在每个节点上划分之前先进行估计,若当前节点的划分不能带来决策树的泛化性能提升,则停止划分并将当前节点标记为叶节点。
\quad 后剪枝:是先从训练集中生成一棵完整的决策树,然后自底向上对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策树泛化性能的提升,则将该子树替换为叶节点。
\quad 决策树的剪枝,往往是通过极小化决策树整体的损失函数或代价函数来实现,决策树学习的损失函数可以定义为: C α ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) + α ∣ T ∣ ( 3 ) C_\alpha(T)=\sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T|\quad\quad(3) Cα(T)=t=1TNtHt(T)+αT(3)
其中: ∣ T ∣ |T| T为叶子节点个数, t t t是树 ∣ T ∣ |T| T的叶节点,该叶节点有 N t N_t Nt个样本点,其中 k k k类的样本点有 N t k N_{tk} Ntk个。
H t ( T ) = − ∑ k N t k N t l o g 2 N t k N t ( 4 ) H_t(T)=-\sum_{k}\dfrac{N_{tk}}{N_t}log_2\dfrac{N_{tk}}{N_t}\quad\quad(4) Ht(T)=kNtNtklog2NtNtk(4)
在损失函数中
C ( T ) = ∑ t = 1 ∣ T ∣ N t H t ( T ) = − ∑ t = 1 ∣ T ∣ ∑ k = 1 K N t k l o g 2 N t k N t ( 5 ) C(T)=\sum_{t=1}^{|T|}N_tH_t(T)=-\sum_{t=1}^{|T|}\sum_{k=1}^{K}N_{tk}log_2\dfrac{N_{tk}}{N_t}\quad\quad(5) C(T)=t=1TNtHt(T)=t=1Tk=1KNtklog2NtNtk(5)
C α ( T ) = C ( T ) + α ∣ T ∣ C_\alpha(T)=C(T)+\alpha{|T|} Cα(T)=C(T)+αT

例: ∣ T ∣ {|T|} T其实就是模型的复杂度。

颜色 测试人员 结果
yellow adult 1
yellow child 0

1 ° 1^° 1°局部剪枝前,该节点的损失为: C α ( T ) = C ( T ) + α ∣ T ∣ = 0 + 2 α = 2 α C_\alpha(T)=C(T)+\alpha{|T|}=0+2\alpha=2\alpha Cα(T)=C(T)+αT=0+2α=2α
2 ° 2^° 2°局部剪枝后,该节点的损失为: C α ( T ) = C ( t ) + α ∣ t ∣ = C ( t ) + α C_\alpha(T)=C(t)+\alpha{|t|}=C(t)+\alpha Cα(T)=C(t)+αt=C(t)+α

其中: C ( t ) = N t H t = 2 ( − 1 2 l o g 1 2 − 1 2 l o g 1 2 ) = 2 C(t)=N_tH_t=2(-\dfrac{1}{2}log\dfrac{1}{2}-\dfrac{1}{2}log\dfrac{1}{2})=2 C(t)=NtHt=2(21log2121log21)=2

故: C α ( T ) = 2 + α C_\alpha(T)=2+\alpha Cα(T)=2+α,定义 α = 特 征 个 数 2 \alpha=\frac{特征个数}{2} α=2

CART

\quad CART同样是由特征选择树的生成及剪枝组成,既可用于分类也可用于回归,常用Gini系数度量。
\quad CART由两步组成,①决策树的生成基于训练数据生成决策树,生成的树尽量大。②决策树的剪枝,用验证数据集对已经生成的树进行剪枝,并选择最优子树,此时用损失函数最小作为剪枝的标准。
**例:**还以前面表格为例
A 1 , A 2 , A 3 , A 4 \quad A_1,A_2,A_3,A_4 A1,A2,A3,A4分别表示年龄、有工作、有自己房子和信贷情况这四个特征并以1、2、3表示青中老年,以1、2表示有工作和有自己房子的值为是和否,以1、2、3表示信贷情况的值为非常好、好、一般,求特征A的基尼指数。
G a i n ( D , A 1 = 1 ) = 5 15 [ 2 × 2 5 × ( 1 − 2 5 ) + 10 15 [ 2 × 7 10 × ( 1 − 7 10 ) ] = 0.44 Gain(D,A_1=1)=\frac{5}{15}[2×\frac{2}{5}×(1-\frac{2}{5})+\frac{10}{15}[2×\frac{7}{10}×(1-\frac{7}{10})]=0.44 Gain(D,A1=1)=155[2×52×(152)+1510[2×107×(1107)]=0.44

G a i n ( D , A 1 = 2 ) = 5 15 [ 2 × 3 5 × ( 1 − 3 5 ) + 10 15 [ 2 × 6 10 × ( 1 − 6 10 ) ] = 0.48 Gain(D,A_1=2)=\frac{5}{15}[2×\frac{3}{5}×(1-\frac{3}{5})+\frac{10}{15}[2×\frac{6}{10}×(1-\frac{6}{10})]=0.48 Gain(D,A1=2)=155[2×53×(153)+1510[2×106×(1106)]=0.48

G a i n ( D , A 1 = 3 ) = 5 15 [ 2 × 4 5 × ( 1 − 4 5 ) + 10 15 [ 2 × 5 10 × ( 1 − 5 10 ) ] = 0.44 Gain(D,A_1=3)=\frac{5}{15}[2×\frac{4}{5}×(1-\frac{4}{5})+\frac{10}{15}[2×\frac{5}{10}×(1-\frac{5}{10})]=0.44 Gain(D,A1=3)=155[2×54×(154)+1510[2×105×(1105)]=0.44
即: A 1 、 A 3 A_1、A_3 A1A3都可以,选 A 1 A_1 A1青年一类,(中、老年)为一类。
有工作和有自己的房子都是二份,可以不用切分,则信贷情况 A 4 A_4 A4:
G a i n ( D , A 4 = 1 ) = 4 15 × 0 + 11 15 [ 2 × 5 11 × ( 1 − 5 11 ) ] = 0.36 Gain(D,A_4=1)=\dfrac{4}{15}×0+\dfrac{11}{15}[2×\dfrac{5}{11}×(1-\dfrac{5}{11})]=0.36 Gain(D,A4=1)=154×0+1511[2×115×(1115)]=0.36

G a i n ( D , A 4 = 2 ) = 0.47 Gain(D,A_4=2)=0.47 Gain(D,A4=2)=0.47

G a i n ( D , A 4 = 3 ) = 0.32 Gain(D,A_4=3)=0.32 Gain(D,A4=3)=0.32
则: G a i n ( D , A 4 = 3 ) Gain(D,A_4=3) Gain(D,A4=3)最小,故选为最优切分点。
{ G a i n ( D , A 1 = 3 ) = 0.44 G a i n ( D , A 2 = 1 ) = 0.32 = 5 15 × ( 1 × 0 × 2 ) + 10 15 × ( 4 10 × 6 10 × 2 ) = 0.32 G a i n ( D , A 3 = 1 ) = 0.27 = 6 15 × ( 1 × 0 × 2 ) + 9 15 × ( 3 9 × 6 9 × 2 ) = 0.27 G a i n ( D , A 4 = 3 ) = 0.32 \begin{cases} Gain(D,A_1=3)=0.44\\&&&&\\ Gain(D,A_2=1)=0.32=\frac{5}{15}×(1×0×2)+\frac{10}{15}×(\frac{4}{10}×\frac{6}{10}×2)=0.32\\&&&&\\ Gain(D,A_3=1)=0.27=\frac{6}{15}×(1×0×2)+\frac{9}{15}×(\frac{3}{9}×\frac{6}{9}×2)=0.27\\&&&&\\ Gain(D,A_4=3)=0.32 \end{cases} Gain(D,A1=3)=0.44Gain(D,A2=1)=0.32=155×(1×0×2)+1510×(104×106×2)=0.32Gain(D,A3=1)=0.27=156×(1×0×2)+159×(93×96×2)=0.27Gain(D,A4=3)=0.32
由小到大, A 3 A_3 A3为最优切分点,依次 A 1 、 A 2 、 A 4 A_1、A_2、A_4 A1A2A4,故选择 A 2 A_2 A2为最优切分点。

XGBOOST算法完整推论_第1张图片

CART分类树的生成算法

i n p u t input input:训练数据集D
o u t p u t output outputCART分类决策树
\quad 构建训练数据集从根节点开始,递归对每个节点进行以下操作。
1 ° 1^° 1°设节点的训练集从根节点开始为 D D D,计算现有特征的 G i n i Gini Gini指数,此时对每一个特征 A A A,对其可能取的值 a a a,根据样本点对 A = a A=a A=a的测试为“是”或“否”将 D D D分割成 D 1 D_1 D1 D 2 D_2 D2两部分,则计算 A = a A=a A=a时的基尼指数。
2 ° 2^° 2°在所有特征 A A A,以及他们所有可能的切分点中选择基尼指数最小的特征及其对应的切分点作为最优特征和最优切分点,依据最优特征及最优切分点,将现节点生成两个子节点,将训练数据依据特征分配到两个子节点中。
3 ° 3^° 3°对两个子节点递归调用步骤 1 ° 1^° 1° 2 ° 2^° 2°直到满足停止条件。
4 ° 4^° 4°生成CART二叉决策树。
:算法停止计算条件是节点中的样本个数小于预定阈值,或样本的基尼指数小于预定阈值,或没有更多特征。

XGBOOST全称(Extreme Gradient Boosting)

1、CART
\quad CART(回归树)是xgboost最基本的组成部分,其根据训练特征及训练数据构建分类树,判定每条数据的预测结果,其中构建树使用gain指数计算增益,即构建树的特征选取。
\quad\quad gini指数公式: G i n i ( D ) = ∑ k = 1 K P k ( 1 − P k ) ( 6 ) Gini(D)=\sum_{k=1}^{K}P_k(1-P_k)\quad\quad(6) Gini(D)=k=1KPk(1Pk)(6)
P k P_k Pk:表示数据 D D D中类别K的概率, K K K表示类别个数。
\quad\quad gini指数增益公式: G i n i ( D , A ) = − ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) ( 7 ) Gini(D,A)=-\dfrac{|D_1|}{|D|}Gini(D_1)+\dfrac{|D_2|}{|D|}Gini(D_2)\quad\quad(7) Gini(D,A)=DD1Gini(D1)+DD2Gini(D2)(7)
D D D:表示整个数据集, D 1 D_1 D1 D 2 D_2 D2分别表示数据集中特征为 A A A的数据集合特征为非 A A A的数据集, G i n i ( D 1 ) Gini(D_1) Gini(D1)表示特征为 A A A的数据集的 g i n i gini gini指数。
2、CART回归树的生成
\quad 对回归树用平方误差最小化准则,对分类树用基尼指数最小化。

1 ° \quad1^° 1°给定训练集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } ( 8 ) D=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}\quad\quad(8) D={(x1,y1),(x2,y2),...,(xN,yN)}(8)

2 ° \quad2^° 2°将输入空间划分为 M M M个单元 R 1 , R 2 , . . . , R M R_1,R_2,...,R_M R1,R2,...,RM,并在每个单元 R m R_m Rm上有一个固定的输出值 C m → C_m\to Cm回归树模型 f ( x ) = ∑ m = 1 M C m I ( x ∈ R m ) ( 9 ) f(x)=\sum_{m=1}^{M}C_mI(x\in R_m)\quad\quad(9) f(x)=m=1MCmI(xRm)(9)

3 ° \quad3^° 3°可以用平方误差 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum_{x_i\in R_m}(y_i-f(x_i))^2 xiRm(yif(xi))2来表示回归树对于训练数据的预测误差则最优 C ^ m = a v e ( y i ∣ x i ∈ R m ) ( 10 ) {\widehat C_m}=ave(y_i|x_i\in R_m)\quad\quad(10) C m=ave(yixiRm)(10)

4 ° \quad4^° 4°这里采用启发式方法选择第 j j j个变量 x ( i ) x^{(i)} x(i)和它的取值 S S S作为切分变量和切分点,则两个区域 R 1 ( j , s ) = { x ∣ x ( j ) ≤ s } R_1(j,s)=\{x|x^{(j)}\le s\} R1(j,s)={xx(j)s} R 2 ( j , s ) = { x ∣ x ( j ) > s } ( 11 ) R_2(j,s)=\{x|x^{(j)}\gt s\}\quad\quad(11) R2(j,s)={xx(j)>s}(11)

5 ° \quad5^° 5°寻找最优点 j j j s s s,求解 min ⁡ j , s [ min ⁡ c 1 ∑ x i ∈ R 1 ( j , s ) ( y i − C c 1 ) 2 + min ⁡ c 2 ∑ x i ∈ R 2 ( j , s ) ( y i − c 2 ) 2 ] ( 12 ) \min\limits_{j,s}[\min\limits_{c_1}\sum_{x_i\in R_1(j,s)}(y_i-Cc_1)^2+\min\limits_{c_2}\sum_{x_i\in R_2(j,s)}(y_i-c_2)^2]\quad\quad(12) j,smin[c1minxiR1(j,s)(yiCc1)2+c2minxiR2(j,s)(yic2)2](12)

6 ° \quad6^° 6°对固定的输入变量 j j j可以找到最优切分点 s s s C ^ 1 = a v e ( y i ∣ x i ∈ R 1 ( j , s ) ) \widehat C_1=ave(y_i|x_i\in R_1(j,s)) C 1=ave(yixiR1(j,s)) C ^ 2 = a v e ( y i ∣ x i ∈ R 2 ( j , s ) ) ( 13 ) \widehat C_2=ave(y_i|x_i\in R_2(j,s))\quad\quad(13) C 2=ave(yixiR2(j,s))(13)

7 ° \quad7^° 7°遍历所有的输入变量,找到最优且分变量 j j j,构成一个对 ( j , s ) (j,s) (j,s),知道满足停止条件。
例:
表 二 : C A R T 例 题 表 表二:CART例题表 CART

x 1 2 3 4 5 6 7 8 9 10
y 5.56 5.7 5.91 6.4 6.8 7.05 8.9 8.7 9 9.05

1 ° \quad1^° 1°在本数据集中,只有一个变量,则最优切分点就是 x x x
2 ° \quad2^° 2° x x x有9个切分点 [ 1.5 , 2.5 , 3.5 , 4.5 , 5.5 , 6.5 , 7.5 , 8.5 , 9.5 ] [1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5] [1.5,2.5,3.5,4.5,5.5,6.5,7.5,8.5,9.5]
3 ° \quad3^° 3°损失函数定义为平方损失函数, L o s s ( y , f ( x ) ) = ( f ( x ) − y ) 2 Loss(y,f(x))=(f(x)-y)^2 Loss(y,f(x))=(f(x)y)2,其中 C m = a v e ( y i ∣ x i ∈ R m ) C_m=ave(y_i|x_i\in R_m) Cm=ave(yixiRm)
4 ° \quad4^° 4° s = 1.5 s=1.5 s=1.5 R 1 = { 1 } R_1=\{1\} R1={1}, R 2 = { 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } R_2=\{2,3,4,5,6,7,8,9,10\} R2={2,3,4,5,6,7,8,9,10}这两个区域的输出值分别为: C 1 = 5.56 C_1=5.56 C1=5.56 C 2 = 1 9 ( 5.7 + 5.91 + 6.4 + 6.8 + 7.05 + 8.9 + 8.7 + 9 + 9.05 ) = 7.5 C_2=\dfrac{1}{9}(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)=7.5 C2=91(5.7+5.91+6.4+6.8+7.05+8.9+8.7+9+9.05)=7.5其结果如下表:

s 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5
c 1 c_1 c1 5.56 5.63 5.72 5.89 6.07 6.24 6.62 6.88 7.11
c 2 c_2 c2 7.5 7.73 7.99 8.25 8.54 8.91 8.92 9.03 9.05

5 ° \quad5^° 5° c 1 , c 2 c_1,c_2 c1,c2的值带入公式 ( 12 ) (12) (12)中,如: m ( 1.5 ) = 0 + [ ( 7.5 − 5.7 ) 2 + ( 7.5 − 5.91 ) 2 + ( 7.5 − 6.4 ) 2 + ( 7.5 − 6.8 ) 2 m(1.5)=0+[(7.5-5.7)^2+(7.5-5.91)^2+(7.5-6.4)^2+(7.5-6.8)^2 m(1.5)=0+[(7.55.7)2+(7.55.91)2+(7.56.4)2+(7.56.8)2
( 7.5 − 7.05 ) 2 + ( 7.5 − 8.9 ) 2 + ( 7.5 − 8.7 ) 2 + ( 7.5 − 9 ) 2 + ( 7.5 − 9.05 ) 2 ] \quad\quad\quad(7.5-7.05)^2+(7.5-8.9)^2+(7.5-8.7)^2+(7.5-9)^2+(7.5-9.05)^2] (7.57.05)2+(7.58.9)2+(7.58.7)2+(7.59)2+(7.59.05)2]
= 0 + 15.7231 = 15.7231 \quad\quad\quad=0+15.7231=15.7231 =0+15.7231=15.7231
6 ° \quad6^° 6°同理,可获得如下表所示:

s 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5
m ( s ) m(s) m(s) 15.72 12.07 8.36 5.78 3.91 1.93 8.01 11.73 15.74

7 ° \quad7^° 7°由上表可知,取 s = 6.5 s=6.5 s=6.5时, m ( s ) m(s) m(s)最小,第一个划分变量 j = x , s = 6.5 j=x,s=6.5 j=x,s=6.5
8 ° \quad8^° 8°以选定的 ( j , s ) (j,s) (j,s)划分区域,并决定输出值,两个区域分别是 R 1 = { 1 , 2 , 3 , 4 , 5 , 6 } , R 2 = { 7 , 8 , 9 , 10 } R_1=\{1,2,3,4,5,6\},R_2=\{7,8,9,10\} R1={1,2,3,4,5,6},R2={7,8,9,10}输出值 C m = a v e ( y i ∣ x i ∈ R m ) , c 1 = 6.24 , c 2 = 8.91 C_m=ave(y_i|x_i\in R_m),c_1=6.24,c_2=8.91 Cm=ave(yixiRm),c1=6.24,c2=8.91
9 ° \quad9^° 9°对两个子区域继续调用以上步骤:对 R 1 : R_1: R1:

x 1 2 3 4 5 6
y 5.56 5.7 5.91 6.4 6.8 7.05

切分点 [ 1.5 , 2.5 , 3.5 , 4.5 , 5.5 ] [1.5,2.5,3.5,4.5,5.5] [1.5,2.5,3.5,4.5,5.5],则各个区域对应输出 c c c值如下表.

s 1.5 2.5 3.5 4.5 5.5
c 1 c_1 c1 5.56 5.63 5.72 5.89 6.07
c 2 c_2 c2 6.37 6.54 6.75 6.93 7.05

计算 m ( s ) m(s) m(s)如下:

s 1.5 2.5 3.5 4.5 5.5
m ( s ) m(s) m(s) 1.3087 0.754 0.2771 0.4368 1.0644

s = 3.5 s=3.5 s=3.5时最小。
1 0 ° \quad10^° 10°生成回归树,假设在生成3个区域后停止划分,则最后的回归树形式,
T = { 5.72 x ≤ 3.5 6.75 3.5 < x ≤ 6.5 8.91 x > 6.5 T=\begin{cases}5.72\quad\quad x\le3.5\\&&&&\\6.75\quad\quad 3.5\lt x\le6.5\\&&&&\\8.91\quad\quad x\gt6.5\end{cases} T=5.72x3.56.753.5<x6.58.91x>6.5

XGBOOST算法完整推论_第2张图片

XGBOOST树的定义

1、下面以论文中的例子为例来说明

XGBOOST算法完整推论_第3张图片

\quad 我们通过CART的方法将家庭成员分到了不同的叶子节点,同事每个叶子节点上都有一个分数,CART的叶子节点仅包含分数,每个叶子节点的分数给了我们更多的解释,这让CART统一优点更容易,此时的一棵树是不够用的,这时就需要把更多的树预测结果综合起来, ⇒ \Rightarrow 符合树模型。如图所示:

XGBOOST算法完整推论_第4张图片

2、xgboost推导过程

1 ° \quad1^° 1°将每棵树上的分数简单相加就得到了最终的分数,用数学公式表达如下:
y ^ = ∑ k = 1 K f k ( x i ) , f k ∈ F ( 14 ) \hat y=\sum\limits_{k=1}^{K}f_k(x_i),\quad\quad f_k\in F\quad\quad(14) y^=k=1Kfk(xi),fkF(14)
{ k : 表 示 树 的 棵 树 。 f : 是 函 数 空 间 中 F 的 一 个 函 数 。 F : 表 示 C A R T 的 所 有 可 能 集 合 。 \begin{cases}k:表示树的棵树。\\&&&&\\f:是函数空间中F的一个函数。\\&&&&\\F:表示CART的所有可能集合。\end{cases} k:f:FF:CART
2 ° \quad2^° 2°增量训练模型,增量训练的方式是在前一步的基础上增加一棵树,而新增的这棵树是为了修复上一棵树的不足,我们把每 t t t步的预测用 y ^ i ( t ) \hat y_i^{(t)} y^i(t)表示,如此有如下:
{ y ^ i ( 0 ) = 0 & y ^ i ( 1 ) = f 1 ( x i ) = y ^ i ( 1 ) + f 1 ( x i ) ⋮ y ^ i ( t ) = ∑ k = 1 t f k ( x i ) = y ^ i ( t − 1 ) + f t ( x i ) ( 15 ) \begin{cases}\hat y_i^{(0)}=0\&\\ \hat y_i^{(1)}=f_1(x_i)=\hat y_i^{(1)}+f_1(x_i)\\ &{\vdots}\\ \hat y_i^{(t)}=\sum\limits_{k=1}^{t}f_k(x_i)=\hat y_i^{(t-1)}+f_t(x_i)\end{cases}\quad\quad(15) y^i(0)=0&y^i(1)=f1(xi)=y^i(1)+f1(xi)y^i(t)=k=1tfk(xi)=y^i(t1)+ft(xi)(15)
3 ° \quad3^° 3°上面的式子在每一部中如何确定哪棵树是我们需要的呢?一个很自然的想法就是增加这棵树是否有助于我们的目标函数。
O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t ) ) + ∑ i = 1 t Ω ( f i ) ( 16 ) Obj^{(t)}=\sum\limits_{i=1}^{n}l(y_i,\hat y_i^{(t)})+\sum\limits_{i=1}^{t}\Omega(f_i)\quad\quad(16) Obj(t)=i=1nl(yi,y^i(t))+i=1tΩ(fi)(16)
即:目标函数=$训练误差+正则化,上式可以转化为:
O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t ) + Ψ ( t ) ( 17 ) Obj^(t)=\sum\limits_{i=1}^{n}l(y_i,\hat y_i^{(t-1)}+f_t(x_i))+\Omega(f_t)+\Psi(t)\quad\quad(17) Obj(t)=i=1nl(yi,y^i(t1)+ft(xi))+Ω(ft)+Ψ(t)(17)

4 ° \quad4^° 4°MSE(均方差)作为损失函数,如此式子就变成了:
O b j ( t ) = ∑ i = 1 n ( y i − ( y ^ i ( t − 1 ) + f t ( x i ) ) ) 2 + ∑ i = 1 t Ω ( f i ) ( 18 ) Obj^(t)=\sum\limits_{i=1}^{n}(y_i-(\hat y_i^{(t-1)}+f_t(x_i)))^2+\sum\limits_{i=1}^{t}\Omega(f_i)\quad\quad(18) Obj(t)=i=1n(yi(y^i(t1)+ft(xi)))2+i=1tΩ(fi)(18)
化简如下: = ∑ i = 1 n [ ( y i − y ^ i ( t − 1 ) ) − f t ( x i ) ] 2 + ∑ i = 1 t Ω ( f i ) \quad\quad\quad\quad=\sum\limits_{i=1}^{n}[(y_i-\hat y_i^{(t-1)})-f_t(x_i)]^2+\sum\limits_{i=1}^{t}\Omega(f_i) =i=1n[(yiy^i(t1))ft(xi)]2+i=1tΩ(fi)
= ∑ i = 1 n [ ( y i − y ^ i ( t − 1 ) ) 2 − 2 ( y i − y ^ i ( t − 1 ) ) f t ( x i ) + f t 2 ( x i ) ] + ∑ i = 1 t Ω ( f i ) \qquad\qquad\qquad\qquad=\sum\limits_{i=1}^{n}[(y_i-\hat y_i^{(t-1)})^2-2(y_i-\hat y_i^{(t-1)})f_t(x_i)+f_t^2(x_i)]+\sum\limits_{i=1}^{t}\Omega(f_i) =i=1n[(yiy^i(t1))22(yiy^i(t1))ft(xi)+ft2(xi)]+i=1tΩ(fi)
= ∑ i = 1 n [ 2 ( y ^ i ( t − 1 ) − y i ) f t ( x i ) + f t 2 ( x i ) ] + Ω ( f t ) + Ψ ( t ) ( 19 ) \qquad\qquad\qquad\qquad=\sum\limits_{i=1}^{n}[2(\hat y_i^{(t-1)}-y_i)f_t(x_i)+f_t^2(x_i)]+\Omega(f_t)+\Psi(t)\quad\quad(19) =i=1n[2(y^i(t1)yi)ft(xi)+ft2(xi)]+Ω(ft)+Ψ(t)(19)
5 ° \quad5^° 5°对于用EMS求出来的损失函数的式子比较友好,包含一个一阶项和一个二阶项,但对于其他形式就很难导出,对于其他形式的函数,则我们采用泰勒公式来逼近计算。
T a y l o r : f ( x + Δ x ) = f ( x ) + f ′ ( x ) Δ x + 1 2 f ′ ′ ( x ) Δ x 2 + ο ( Δ x 2 ) ( 20 ) Taylor:\quad\quad f(x+\Delta x)=f(x)+f{'}{(x)}\Delta x+\frac{1}{2}f{''}{(x)}\Delta x^2+\omicron(\Delta x^2)\quad\quad(20) Taylor:f(x+Δx)=f(x)+f(x)Δx+21f(x)Δx2+ο(Δx2)(20)
6 ° \quad6^° 6°则目标函数 O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t ) ) + ∑ i = 1 t Ω ( f i ) Obj^{(t)}=\sum\limits_{i=1}^{n}l(y_i,\hat y_i^{(t)})+\sum\limits_{i=1}^{t}\Omega(f_i) Obj(t)=i=1nl(yi,y^i(t))+i=1tΩ(fi)可以转化为:
O b j ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i ) + Ω ( f t ) + Ψ ( t ) ( 21 ) Obj^{(t)}=\sum\limits_{i=1}^{n}l(y_i,\hat y_i^{(t-1)})+g_if_t(x_i)+\frac{1}{2}h_if_t^{2}(x_i)+\Omega(f_t)+\Psi(t)\quad\quad(21) Obj(t)=i=1nl(yi,y^i(t1))+gift(xi)+21hift2(xi)+Ω(ft)+Ψ(t)(21)
其中: g i = ∂ [ l ( y i , y ^ i ( t − 1 ) ) ] ∂ [ y ^ i ( t − 1 ) ] , h i = ∂ 2 [ l ( y i , y ^ i ( t − 1 ) ) ] ∂ [ y ^ i ( t − 1 ) ] 2 g_i=\dfrac{\partial[l(y_i,\hat y_i^{(t-1)})]}{\partial[\hat y_i^{(t-1)}]},\quad\quad h_i=\dfrac{\partial^{2}[l(y_i,\hat y_i^{(t-1)})]}{\partial[\hat y_i^{(t-1)}]^2} gi=[y^i(t1)][l(yi,y^i(t1))],hi=[y^i(t1)]22[l(yi,y^i(t1))]
7 ° \quad7^° 7°对上述式子删除常数项,则目标函数为:
O b j ( t ) = ∑ i = 1 n [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + Ω ( f t ) ( 22 ) Obj^{(t)}=\sum\limits_{i=1}^{n}[g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\Omega(f_t)\quad\quad(22) Obj(t)=i=1n[gift(xi)+21hift2(xi)]+Ω(ft)(22)
上述式子就是优化目标,式子只需要 g i g_i gi h i h_i hi,这就是xgboost为什么能支持自定义损失函数的原因,所以我们能够优化每一种损失函数,包括逻辑回归和加权逻辑回归,只需要把对应的 g i g_i gi h i h_i hi作为输入即可。
8 ° \quad8^° 8°模型复杂度,现在说说正则化部分,即 Ω ( f t ) \Omega(f_t) Ω(ft),在此之前需要定义 f ( x ) f(x) f(x)
f t ( x ) = w q ( x ) , w ∈ R T , q : R d → { 1 , 2 , . . . , T } ( 23 ) f_t(x)=w_{q(x)}, \quad\quad w\in R^T,\quad\quad q:R^d \to\{1,2,...,T\}\quad\quad(23) ft(x)=wq(x),wRT,q:Rd{1,2,...,T}(23)
{ w : 表 示 叶 子 节 点 上 的 分 数 所 组 成 的 向 量 。 q : 表 示 每 个 数 据 映 射 到 相 应 叶 子 节 点 的 对 应 关 系 函 数 ( q ( x ) 叶 子 节 点 编 号 ) , 从 左 至 右 。 T : 表 示 叶 子 节 点 的 数 量 。 \begin{cases}w:表示叶子节点上的分数所组成的向量。\\&&&&\\q:表示每个数据映射到相应叶子节点的对应关系函数(q(x)叶子节点编号),从左至右。\\&&&&\\T:表示叶子节点的数量。\end{cases} w:q:(q(x))T:
xgboost中用如下公式定义复杂度:
Ω ( f ) = γ T + 1 2 λ ∑ j = 1 T w j 2 ( 24 ) \Omega(f)=\gamma T+\frac{1}{2}\lambda\sum\limits_{j=1}^{T}w_j^2\quad\quad(24) Ω(f)=γT+21λj=1Twj2(24)
上述式子表现的非常友好,然而其他算法直接将正则项忽略。
9 ° \quad9^° 9°这一部分是推广过程中比较神奇的一步,根据上述过程,写出第 t t t步树的目标值。
O b j ( t ) = ∑ i = 1 n [ g i w q ( x i ) + 1 2 h i w q ( x i ) 2 ] + γ T + 1 2 λ ∑ j = 1 T w j 2 ( 25 ) Obj^{(t)}=\sum\limits_{i=1}^{n}[g_iw_{q(x_i)}+ \frac{1}{2}h_iw_{q(x_i)}^2]+\gamma T+\frac{1}{2}\lambda\sum\limits_{j=1}^{T}w_j^2\quad\quad(25) Obj(t)=i=1n[giwq(xi)+21hiwq(xi)2]+γT+21λj=1Twj2(25)
化简为: O b j ( t ) = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h i + λ ) w j 2 ] + γ T ( 26 ) Obj^{(t)}=\sum\limits_{j=1}^{T}[(\sum\limits_{i\in I_j}g_i)w_j+\frac{1}{2}(\sum\limits_{i\in I_j}h_i+\lambda)w_j^2]+\gamma T\quad\quad(26) Obj(t)=j=1T[(iIjgi)wj+21(iIjhi+λ)wj2]+γT(26)
其中: { w q ( x i ) = f t ( x i ) ∑ i = 1 n w q ( x i ) = ∑ j = 1 T w j \begin{cases} w_{q(x_i)}=f_t(x_i)\\&&&&\\ \sum\limits_{i=1}^{n}w_{q(x_i)}=\sum\limits_{j=1}^{T}w_j \end{cases} wq(xi)=ft(xi)i=1nwq(xi)=j=1Twj
1 0 ° \quad10^° 10°上式中的 I j = { i ∣ q ( x i ) = j } I_j=\{i|q(x_i)=j\} Ij={iq(xi)=j}表示每个映射到第 j j j个叶子节点对应的数据样本,要注意的是,因为映射到相同叶子节点上的数据样本他们的分数是相同的,所以可以改变求和顺序。
同时令: { G j = ∑ i ∈ I j g i H j = ∑ i ∈ I j h i \begin{cases}G_j=\sum\limits_{i\in I_j}g_i\\&&&&\\H_j=\sum\limits_{i\in I_j}h_i\end{cases} Gj=iIjgiHj=iIjhi,则上式 ( 26 ) (26) (26)可以转化为:
O b j ( t ) = ∑ j = 1 T [ G j w j + 1 2 ( H j + λ ) w j 2 ] + γ T ( 27 ) Obj^{(t)}=\sum\limits_{j=1}^{T}[G_jw_j+\frac{1}{2}(H_j+\lambda)w_j^2]+\gamma T\quad\quad(27) Obj(t)=j=1T[Gjwj+21(Hj+λ)wj2]+γT(27)
1 1 ° \quad11^° 11°在上述式子中,每个 w j w_j wj都是相互独立的,那么针对一元二次方程 G j w j + 1 2 ( H j + λ ) w j 2 G_jw_j+\frac{1}{2}(H_j+\lambda)w_j^2 Gjwj+21(Hj+λ)wj2而言,可以比较容易求出当新增这棵树的结构 q ( x ) q(x) q(x)一直的情况下,目标函数最小值的 w j w_j wj,对上式 ( 27 ) (27) (27) w w w的偏导数:令
∂ [ O b j ( t ) ] ∂ w = ∂ [ G j w j + 1 2 ( H j + λ ) w j 2 ] ∂ w = 0 ( 28 ) \frac{\partial[Obj^{(t)}]}{\partial w}=\frac{\partial[G_jw_j+\frac{1}{2}(H_j+\lambda)w_j^2]}{\partial w}=0\quad\quad(28) w[Obj(t)]=w[Gjwj+21(Hj+λ)wj2]=0(28)
对上式求解:即: G j + ( H j + λ ) w j = 0 G_j+(H_j+\lambda)w_j=0 Gj+(Hj+λ)wj=0
⇒ w j ∗ = − G j H j + λ ( 29 ) \Rightarrow w_j^{\ast}=\dfrac{-G_j}{H_j+\lambda}\quad\quad(29) wj=Hj+λGj(29)
⇒ w j ∗ = − G j H j + λ \Rightarrow w_j^{\ast}=\dfrac{-G_j}{H_j+\lambda} wj=Hj+λGj带入式子 ( 27 ) (27) (27)中得:
O b j ∗ = − 1 2 ∑ j = 1 T G j 2 H j + λ + γ T ( 30 ) Obj^{\ast}=-\frac{1}{2}\sum\limits_{j=1}^{T}\frac{G_j^2}{H_j+\lambda}+\gamma T\quad\quad(30) Obj=21j=1THj+λGj2+γT(30)
1 2 ° \quad12^° 12°一旦数的结构已知,则只需计算每个节点上的 g i g_i gi h i h_i hi,然后把各个叶子节点上的这些数值加起来,用上述式子便可知道这棵树的优势。

3、如何学习树的结构

\quad 现在已经知道一旦树的结构确定下来便可计算叶子节点的分数,以及这棵树的优劣。那么现在解决如何学习这棵树的结构,一种是遍历所有可能树结构,然后找到最优的那棵树,如此这样做是非常不切实际的,因为情况太多,所以采用贪心解法。就是在树的每层构建过程中来优化目标,假设特征已经选定,可以通过以下式子获得收益:
G a i n = 1 2 [ G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ ] − γ ( 31 ) Gain=\frac{1}{2}[\frac{G_L^2}{H_L+\lambda}+\frac{G_R^2}{H_R+\lambda}-\frac{(G_L+G_R)^2}{H_L+H_R+\lambda}]-\gamma \quad\quad(31) Gain=21[HL+λGL2+HR+λGR2HL+HR+λ(GL+GR)2]γ(31)
其中: { G L 2 H L + λ : 左 子 树 分 数 。 G R 2 H R + λ : 右 子 树 分 数 。 ( G L + G R ) 2 H L + H R + λ : 不 分 割 节 点 时 原 节 点 的 分 数 。 γ : 加 入 新 叶 子 节 点 引 入 的 复 杂 度 代 价 。 \begin{cases} \frac{G_L^2}{H_L+\lambda}:左子树分数。\\&&\\ \frac{G_R^2}{H_R+\lambda}:右子树分数。\\&&\\ \frac{(G_L+G_R)^2}{H_L+H_R+\lambda}:不分割节点时原节点的分数。\\&&\\ \gamma:加入新叶子节点引入的复杂度代价。 \end{cases} HL+λGL2:HR+λGR2:HL+HR+λ(GL+GR)2:γ:

注:

1 ° \quad1^° 1°其实正则为什么可以控制模型复杂度呢?,最直观的就是,为了目标函数最小,自然正则项也要笑, ⇒ \Rightarrow 正则要小 ⇒ \Rightarrow 叶子节点个数 T T T要小 ⇒ \Rightarrow 叶子节点数少,树就简单。
2 ° \quad2^° 2°然而为什么要对叶子节点进行 L 2 L_2 L2正则,这个可以参考LR里面进行正则的原因,简单地说就是LR没有加正则,这个 w w w的参数空间是无限大的,只有加了正则以后,才会把 w w w的解规范在一个范围内。(不带正则的LR每次出来权重 w w w都不一样,但是loss都一样,加了 L 2 L_2 L2正则后,每次得到的 w w w都一样。)
3 ° \quad3^° 3°具体来说,我们回忆一下建树的时候需要做什么,建树的时候最关键的一步就是选择一个分裂的准则,也就是如何评价分裂的质量,在分类任务里,损失函数可以选择Logloss,分裂准则选择MSE

XGBOOST手动还原例题

例 题 原 始 表 例题原始表

ID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
x 1 x_1 x1 1 2 3 1 2 6 7 6 7 6 8 9 10 8 9
x 2 x_2 x2 -5 5 -2 2 0 -5 5 -2 2 0 -5 5 -2 2 0
y y y 0 0 1 1 1 1 1 0 0 1 1 1 0 0 1

\quad 这里为了计算简单树的深度设置为3(math_depth=3),树的棵树设置为2(num_boost_round=2),学习率为0.1(eta=0.1),另外正则参数 λ = 1 , γ = 0 \lambda=1,\gamma=0 λ=1,γ=0
\quad 由于后面需要用到Logloss的一阶导数和二阶导数,这里简单推导一下:
L ( y i , y ^ i ) = y i l n ( 1 + e − y ^ i ) + ( 1 − y i ) l n ( 1 + e y ^ i ) ( 32 ) L(y_i,\hat y_i)=y_iln(1+e^{-\hat y_i})+(1-y_i)ln(1+e^{\hat y_i})\quad\quad(32) L(yi,y^i)=yiln(1+ey^i)+(1yi)ln(1+ey^i)(32)

y ^ i \hat y_i y^i取一阶导数: L ′ ( y i , y ^ i ) = y i − e − y ^ i 1 + e − y ^ i + ( 1 − y i ) e y ^ i 1 + e y ^ i L^{'}(y_i,\hat y_i)=y_i\dfrac{-e^{-\hat y_i}}{1+e^{-\hat y_i}}+(1-y_i)\dfrac{e^{\hat y_i}}{1+e^{\hat y_i}} L(yi,y^i)=yi1+ey^iey^i+(1yi)1+ey^iey^i
= y i − ( e − y ^ i + 1 ) + 1 1 + e − y ^ i + ( 1 − y i ) 1 1 + e − y ^ i \qquad\qquad\qquad\qquad\qquad=y_i\dfrac{-(e^{-\hat y_i}+1)+1}{1+e^{-\hat y_i}}+(1-y_i)\dfrac{1}{1+e^{-\hat y_i}} =yi1+ey^i(ey^i+1)+1+(1yi)1+ey^i1
= y i ( − ( e − y ^ i + 1 ) + 1 e − y ^ i + 1 ) + ( 1 − y i ) 1 1 + e − y ^ i \qquad\qquad\qquad\qquad\qquad=y_i(\dfrac{-(e^{-\hat y_i}+1)+1}{e^{-\hat y_i}+1})+(1-y_i)\dfrac{1}{1+e^{-\hat y_i}} =yi(ey^i+1(ey^i+1)+1)+(1yi)1+ey^i1
= y i ∗ ( y i , p r e d − 1 ) + ( 1 − y i ) ∗ y i , p r e d \qquad\qquad\qquad\qquad\qquad=y_i*(y_{i,pred}-1)+(1-y_i)*y_{i,pred} =yi(yi,pred1)+(1yi)yi,pred
= y i , p r e d − y i \qquad\qquad\qquad\qquad\qquad=y_{i,pred}-y_i =yi,predyi
其中: 1 1 + e − y ^ i = y i , p r e d \dfrac{1}{1+e^{-\hat y_i}}=y_{i,pred} 1+ey^i1=yi,pred
二阶导数:在一阶导数的基础上再取 y ^ i \hat y_i y^i的导数。
L ′ ′ ( y i , y ^ i ) = y i , p r e d ∗ ( 1 − y i , p r e d ) L^{''}(y_i,\hat y_i)=y_{i,pred}*(1-y_{i,pred}) L(yi,y^i)=yi,pred(1yi,pred)
即: { g i = y i , p r e d − y i h i = y i , p r e d ∗ ( 1 − y i , p r e d ) ( 33 ) \begin{cases} g_i=y_{i,pred}-y_i\\&&\\ h_i=y_{i,pred}*(1-y_{i,pred}) \end{cases}\quad\quad(33) gi=yi,predyihi=yi,pred(1yi,pred)(33)

1、建立第一棵树(k=1)

1 ° \quad1^° 1°从根节点开始,在根节点上的样本有ID1——ID15,那么在根节点分裂的时候需要计算信息增益, G a i n = 1 2 [ G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ ] − γ Gain=\dfrac{1}{2}[\dfrac{G_L^2}{H_L+\lambda}+\dfrac{G_R^2}{H_R+\lambda}-\dfrac{(G_L+G_R)^2}{H_L+H_R+\lambda}]-\gamma Gain=21[HL+λGL2+HR+λGR2HL+HR+λ(GL+GR)2]γ在节点处把样本分成左右节点集合,分别计算两个集合的 G L , H L , G R , H R G_L,H_L,G_R,H_R GL,HL,GR,HR然后计算Gain
2 ° \quad2^° 2°先计算每个样本的一阶导数和二阶导数,按式子**(33)计算,但这里会有一个问题,那就是第一棵树的预测概率 y i , p r e d y_{i,pred} yi,pred是多少,在xgboost里,对于分类任务只需初始化为(0,1)中的任意一个数都可以,具体初始参数base_score默认0.5**。(注:base_score是一个经过sigmod映射的值,可以认为是一个概率值,这个在后面第二颗树会用到)
3 ° \quad3^° 3°base_score=0.5,然后计算一阶和二阶导数值,如下表:

ID 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
g i g_i gi 0.5 0.5 -0.5 -0.5 -0.5 -0.5 -0.5 0.5 0.5 -0.5 -0.5 -0.5 0.5 0.5 -0.5
h i h_i hi 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25

ID=1样本, { g 1 = y i , p r e d − y 1 = 0.5 − 0 = 0.5 h 1 = y i , p r e d ∗ ( 1 − y 1 , p r e d ) = 0.5 ∗ ( 1 − 0.5 ) = 0.25 \begin{cases} g_1=y_{i,pred}-y_1=0.5-0=0.5\\&&\\ h_1=y_{i,pred}*(1-y_{1,pred})=0.5*(1-0.5)=0.25 \end{cases} g1=yi,predy1=0.50=0.5h1=yi,pred(1y1,pred)=0.5(10.5)=0.25
那么如何把样本分成两个集合呢,这里就是上面说到的选取一个最佳的特征以及最佳分裂点使得Gain最大。如特征 x 1 x_1 x1有**[1,2,3,6,7,8,9,10]**这八种取值,可以得到以下的划分方式。

4 ° \quad4^° 4°1为划分时( x 1 < 1 x_1\lt1 x1<1)

{ 左 子 树 包 含 的 样 本 I L = [ ] 右 子 树 包 含 的 样 本 I R = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ] \begin{cases} 左子树包含的样本I_L=[\quad]\\&&\\ 右子树包含的样本I_R=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15] \end{cases} IL=[]IR=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
则左子树节点为空, { 一 阶 导 数 和 : G L = 0 二 阶 导 数 和 : H L = 0 \begin{cases} 一阶导数和:G_L=0\\&&\\ 二阶导数和:H_L=0 \end{cases} GL=0HL=0
右子树节点 { 一 阶 导 数 和 : G R = ∑ i ∈ I R g i = ( 0.5 + 0.5 + ⋯ + ( − 0.5 ) ) = − 1.5 二 阶 导 数 和 : H R = ∑ i ∈ I R h i = ( 0.25 + 0.25 + ⋯ + 0.25 ) = 3.75 \begin{cases} 一阶导数和:G_R=\sum_{i\in I_R}g_i=(0.5+0.5+\cdots+(-0.5))=-1.5\\&&\\ 二阶导数和:H_R=\sum_{i\in I_R}h_i=(0.25+0.25+\cdots+0.25)=3.75 \end{cases} GR=iIRgi=(0.5+0.5++(0.5))=1.5HR=iIRhi=(0.25+0.25++0.25)=3.75

\quad 最后我们再计算一下Gain,则Gain=0 ⇐ G a i n = G L 2 H L + λ + G R 2 H R + λ − ( G L + G R ) 2 H L + H R + λ \quad\Leftarrow\quad Gain=\dfrac{G_L^2}{H_L+\lambda}+\dfrac{G_R^2}{H_R+\lambda}-\dfrac{(G_L+G_R)^2}{H_L+H_R+\lambda} Gain=HL+λGL2+HR+λGR2HL+HR+λ(GL+GR)2

(注:计算出来以后发现Gain=0,不用惊讶,因为所有节点都分到了右子树,和没分裂之前是一样的,所以增益为0。)

5 ° \quad5^° 5°下面以2为划分节点( x 1 < 2 x_1\lt2 x1<2)
{ 左 子 树 包 含 样 本 节 点 I L = [ 1 , 4 ] 右 子 树 包 含 样 本 节 点 I R = [ 2 , 3 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ] \begin{cases} 左子树包含样本节点I_L=[1,4]\\&&\\ 右子树包含样本节点I_R=[2,3,5,6,7,8,9,10,11,12,13,14,15] \end{cases} IL=[1,4]IR=[2,3,5,6,7,8,9,10,11,12,13,14,15]

{ 左 子 树 一 阶 导 数 和 : G L = ∑ i ∈ I L g i = 0.5 − 0.5 = 0 左 子 树 二 阶 导 数 和 : H L = ∑ i ∈ I L h i = 0.25 + 0.25 = 0.5 \begin{cases} 左子树一阶导数和:G_L=\sum_{i\in I_L}g_i=0.5-0.5=0\\&&\\ 左子树二阶导数和:H_L=\sum_{i\in I_L}h_i=0.25+0.25=0.5 \end{cases} :GL=i

你可能感兴趣的:(算法)