极限梯度提升 (XGBoost, eXtreme Gradient Boosting)
训练数据集 D = [ ( x i , y i ) ] D = [ ( x i , y i ) ] , 其中 → x i = ( x 1 , x 2 , . . x m ) T , x i ∈ R m , y i ∈ R , | D | = n x → i = ( x 1 , x 2 , . . x m ) T , x i ∈ R m , y i ∈ R , | D | = n ,
决策树模型
f ( x ) = w q ( x ) (1) (1) f ( x ) = w q ( x )
其中,q : R T → { 1 , . . . , T } q : R T → { 1 , . . . , T } 是由输入x向叶子节点编号的映射, w ∈ R T , → w = ( w 1 , w 2 , . . w m ) T w ∈ R T , w → = ( w 1 , w 2 , . . w m ) T 是叶子节点向量,w存储的是当前叶子节点存储的输出值,T为决策树叶子节点数。
给一个向量可以通过q映射到那个叶子节点下。
假设树已经生成,如何生成在下面。
提升决策树模型输出
^ y i = ϕ ( x i ) = K ∑ k = 1 f k ( x i ) (2) (2) y ^ i = ϕ ( x i ) = ∑ k = 1 K f k ( x i )
其中,f k ( x ) f k ( x ) 为第k棵决策树。
加了正则化目标函数
τ ( ϕ ) = ∑ i l ( ^ y i , y i ) + ∑ k Ω ( f t ) (3) (3) τ ( ϕ ) = ∑ i l ( y ^ i , y i ) + ∑ k Ω ( f t )
f k f k 是一棵树。正则化项表征当前模型的复杂程度(模型复杂度是指非确定模型的假设空间的大小,假设空间越大,模型越复杂)[1]
Ω ( f ) = γ T + 1 2 λ ∥ w ∥ 2 = γ T + 1 2 λ T ∑ j w 2 j (4) (4) Ω ( f ) = γ T + 1 2 λ ‖ w ‖ 2 = γ T + 1 2 λ ∑ j T w j 2
T是当前这颗树的叶子节点个数,表征当前模型的复杂程度。叶子节点约少模型约简单。
第t轮目标函数
ι ( t ) = n ∑ i = 1 l ( y i , ^ y ( t − 1 ) i + f t ( x i ) ) + Ω ( f t ) (5) (5) ι ( t ) = ∑ i = 1 n l ( y i , y ^ i ( t − 1 ) + f t ( x i ) ) + Ω ( f t )
第t轮目标函数L ( t ) L ( t ) 在 ^ y ( t − 1 ) y ^ ( t − 1 ) 的二阶泰勒展开
f ( x t ) = f ( x t − 1 + Δ x ) = f ( x t − 1 ) + f ′ ( x t − 1 ) Δ x + 1 2 f ′′ ( x t − 1 ) Δ 2 x ^ y ( t − 1 ) i = x t − 1 , f t ( x i ) = Δ x (6) (6) f ( x t ) = f ( x t − 1 + Δ x ) = f ( x t − 1 ) + f ′ ( x t − 1 ) Δ x + 1 2 f ″ ( x t − 1 ) Δ 2 x y ^ i ( t − 1 ) = x t − 1 , f t ( x i ) = Δ x
ι ( t ) ≈ n ∑ i = 1 [ l ( y i , ^ y t − 1 ) + l ′ y t − 1 ( y i , ^ y t − 1 ) f t ( x i ) + 1 2 l ′′ y t − 1 ( y i , ^ y t − 1 f 2 t ( x i ) ) ] + Ω ( f t ) = n ∑ i = 1 [ l ( y i , ^ y t − 1 ) + g i f i ( x i ) + 1 2 h i f 2 i ( x i ) ] + Ω ( f t ) (7) (7) ι ( t ) ≈ ∑ i = 1 n [ l ( y i , y ^ t − 1 ) + l y t − 1 ′ ( y i , y ^ t − 1 ) f t ( x i ) + 1 2 l y t − 1 ″ ( y i , y ^ t − 1 f t 2 ( x i ) ) ] + Ω ( f t ) = ∑ i = 1 n [ l ( y i , y ^ t − 1 ) + g i f i ( x i ) + 1 2 h i f i 2 ( x i ) ] + Ω ( f t )
其中, g i = l ′ ^ y t − 1 ( y , ^ y t − 1 ) , h i = l ′′ ^ y t − 1 ( y , ^ y t − 1 ) g i = l y ^ t − 1 ′ ( y , y ^ t − 1 ) , h i = l y ^ t − 1 ″ ( y , y ^ t − 1 )
第t轮目标函数 ι ( t ) ι ( t ) 的二阶泰勒展开,并移除关于f t ( x t ) f t ( x t ) 常数项
从第t轮看t-1轮 y t − 1 y t − 1 是已知的,所以剔除 l ( y i , y t − 1 ) l ( y i , y t − 1 )
ι ( t ) = n ∑ i = 1 [ g i f i ( x i ) + 1 2 h i f 2 i ( x i ) ] + Ω ( f t ) = n ∑ i = 1 [ g i f i ( x i ) + 1 2 h i f 2 i ( x i ) ] + γ T + 1 2 γ T ∑ j = 1 w 2 j (8) (8) ι ( t ) = ∑ i = 1 n [ g i f i ( x i ) + 1 2 h i f i 2 ( x i ) ] + Ω ( f t ) = ∑ i = 1 n [ g i f i ( x i ) + 1 2 h i f i 2 ( x i ) ] + γ T + 1 2 γ ∑ j = 1 T w j 2
n是数据集的个数,第一个累加符号是在整个数据集中计算这个式子。第二个累加符号是在叶子节点累加。
定义叶子节点j上的样本的下标集合 I j = { i | q ( X i ) = j } I j = { i | q ( X i ) = j } (关键),则目标函数可表示为按叶子节点累加的形式。
例如遍历一个花名册,念完每个人都遍历到了,或者每个人都被编入到每个小组里面,那么我想要遍历每个人,可以变成我对每个小组里的人进行遍历。两次遍历的结果是一样的。
ι ( t ) = T ∑ j = 1 ⎡ ⎣ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h j + λ ) w 2 j ⎤ ⎦ + λ T (9) (9) ι ( t ) = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h j + λ ) w j 2 ] + λ T
为什么 f i ( x i ) = w 2 j f i ( x i ) = w j 2 见公式(20) (精髓啊)
目标函数写完以后,最优解就是使目标函数最小的映射输出。
由于 w ∗ j = a r g min w j ^ ι ( t ) w j ∗ = a r g min w j ι ^ ( t )
令 ∂ ^ ι ( t ) ∂ w j = 0 ∂ ι ^ ( t ) ∂ w j = 0
w ∗ j = − ∑ i ∈ I j g i ∑ i ∈ I j h i + λ (10) (10) w j ∗ = − ∑ i ∈ I j g i ∑ i ∈ I j h i + λ
在将这个最优w(每个叶子节点j的最优分数),得到最优化目标函数值:
^ ι ( t ) ( q ) = − 1 2 T ∑ j = 1 [ ( ∑ i ∈ I L g i ) 2 ∑ i ∈ I L h i + λ ] + γ T (11) (11) ι ^ ( t ) ( q ) = − 1 2 ∑ j = 1 T [ ( ∑ i ∈ I L g i ) 2 ∑ i ∈ I L h i + λ ] + γ T
假设 I L I L 和 I R I R 分别为分裂后左右节点的实例集,令 I = I L ∪ I R I = I L ∪ I R , 则分裂后损失减少量由下式得出
ι ′ s p l i t = 1 2 [ ( ∑ i ∈ I L g i ) 2 ∑ i ∈ I L h i + λ + ( ∑ i ∈ I R g i ) 2 ∑ i ∈ I R h i + λ − ( ∑ i ∈ I I g i ) 2 ∑ i ∈ I I h i + λ ] − γ (12) (12) ι s p l i t ′ = 1 2 [ ( ∑ i ∈ I L g i ) 2 ∑ i ∈ I L h i + λ + ( ∑ i ∈ I R g i ) 2 ∑ i ∈ I R h i + λ − ( ∑ i ∈ I I g i ) 2 ∑ i ∈ I I h i + λ ] − γ
左子树的损失值+右子树的损失值-整棵树的损失值,表征当前特征分裂的重要依据
算法:分裂查找的精确贪婪算法
输入:当前节点实例集 I;特征维度d = M
输出:根据最大分值分裂
(1) g a i n ← 0 g a i n ← 0
(2) G ← ∑ i ∈ I g i , H ← ∑ i ∈ I h i G ← ∑ i ∈ I g i , H ← ∑ i ∈ I h i
(3) for k = 1 to d do
(3.1) G ← 0 , H L ← 0 G ← 0 , H L ← 0
(3.2) for j in sorted(I, by X j k X j k ) do
(3.2.1) G L ← G L + g j , H L ← H L + h j G L ← G L + g j , H L ← H L + h j
(3.2.2) G R ← G − G L , H R = H − H L G R ← G − G L , H R = H − H L
(3.2.3) score ← m a x ( s c o r e , G 2 L H L + λ + G 2 R H R + λ + G 2 H + λ ) ← m a x ( s c o r e , G L 2 H L + λ + G R 2 H R + λ + G 2 H + λ )
(3.3) end
(4)end
参考文献
【机器学习基础】一文说透正则项与模型复杂度
markdown中公式编辑教程
markdown 数学公式符号大全
【机器学习】经验风险最小化与结构风险最小化
Gradient Boosting 原理、推导及代码实现
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步