| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> XGBoost A Scalable Tree Boosting System -> 正文阅读 |
|
[人工智能]XGBoost A Scalable Tree Boosting System |
XGBoost: A Scalable Tree Boosting System 论文阅读笔记作者:陈天奇 2016年发表 XGBoost 是大规模并行 boosting tree 的工具,它是目前最快最好的开源 boosting tree 工具包,比常见的工具包快 10 倍以上。xgboost 和 GBDT 两者都是 boosting 方法,除了工程实现、解决问题上的一些差异外,最大的不同就是目标函数的定义。 1.正则化目标函数xgboost和GBDT等boosting算法一样,由 k k k个基模型组成的加法运算式。 y i ^ = ? ( x i ) = ∑ k = 1 K f k ( x i ) , ? f k ∈ F \hat{y_i}=\phi(x_i)=\sum_{k=1}^{K}f_k(x_i),\ f_k\in \mathcal{F} yi?^?=?(xi?)=k=1∑K?fk?(xi?),?fk?∈F 其中 F = { f ( x ) = w q ( x ) } ( q : R m → T , w ∈ R T ) \mathcal{F}=\left \{ f(x)=w_{q(x)}\right \}(q:R^m\rightarrow T, w\in R^T) F={f(x)=wq(x)?}(q:Rm→T,w∈RT)是回归树空间,其中 w q ( x ) w_{q(x)} wq(x)?代表样本 x x x处在 q ( x ) q(x) q(x)节点上,取值为权值 w q ( x ) w_{q(x)} wq(x)?,所以模型的目标函数为: L ( ? ) = ∑ i = 1 l ( y i ^ , y i ) + ∑ k Ω ( f k ) L(\phi)=\sum_{i=1}l(\hat{y_i}, y_i)+\sum_{k}\Omega(f_k) L(?)=i=1∑?l(yi?^?,yi?)+k∑?Ω(fk?) 其中 l l l代表模型学习过程中设定的损失函数,可以为mae、mse等常见损失函数,第二项是正则项,为 Ω ( f ) = γ T + 1 2 λ ∥ w ∥ 2 \Omega(f)=\gamma T + \frac{1}{2}\lambda\|w\|^2 Ω(f)=γT+21?λ∥w∥2, w w w为各个叶子节点的权重,类似与LR模型的权重。 因为模型是加法模型,我们可以二阶泰勒展开 L t ( ? ) = ∑ i = 1 l ( y i ^ ( t ) , y i ) + ∑ k Ω ( f k ) = ∑ i = 1 l ( y i ^ ( t ? 1 ) + f t ( x i ) , y i ) + ∑ k Ω ( f k ) ≈ ∑ i = 1 [ ( l ( y i ^ ( t ? 1 ) , y i ) + g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + ∑ k Ω ( f k ) L^t(\phi)=\sum_{i=1}l(\hat{y_i}^{(t)}, y_i)+\sum_{k}\Omega(f_k)=\sum_{i=1}l(\hat{y_i}^{(t-1)}+f_t(x_i), y_i)+\sum_{k}\Omega(f_k)\approx\sum_{i=1}[(l(\hat{y_i}^{(t-1)}, y_i)+g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\sum_{k}\Omega(f_k) Lt(?)=i=1∑?l(yi?^?(t),yi?)+k∑?Ω(fk?)=i=1∑?l(yi?^?(t?1)+ft?(xi?),yi?)+k∑?Ω(fk?)≈i=1∑?[(l(yi?^?(t?1),yi?)+gi?ft?(xi?)+21?hi?ft2?(xi?)]+k∑?Ω(fk?) 其中 g i = ? y ^ ( t ? 1 ) l ( y i , y ^ ( t ? 1 ) ) ∣ y ^ ( t ? 1 ) = y i ^ ( t ? 1 ) g_i=\partial_{\hat{y}^{(t-1)}} l(y_{i}, \hat{y}^{(t-1)})|_{\hat{y}^{(t-1)}=\hat{y_i}^{(t-1)}} gi?=?y^?(t?1)?l(yi?,y^?(t?1))∣y^?(t?1)=yi?^?(t?1)?, h i = ? y ^ ( t ? 1 ) 2 l ( y i , y ^ ( t ? 1 ) ) ∣ y ^ ( t ? 1 ) = y i ^ ( t ? 1 ) h_i=\partial^2_{\hat{y}^{(t-1)}}l(y_{i}, \hat{y}^{(t-1)})|_{\hat{y}^{(t-1)}=\hat{y_i}^{(t-1)}} hi?=?y^?(t?1)2?l(yi?,y^?(t?1))∣y^?(t?1)=yi?^?(t?1)?,因为此性质,xgb不仅可以用决策树当基分类器,也支持其他线性模型,只要满足一、二阶可导即可。 因为上式中 l ( y i ^ ( t ? 1 ) , y i ) l(\hat{y_i}^{(t-1)}, y_i) l(yi?^?(t?1),yi?)是常数项, 我们的目标是最小化 L t ( ? ) L^t(\phi) Lt(?),所以可以舍去,就得到了我们需要最小化的目标函数,定义 I j = { i ∣ q ( x i ) = j } I_j=\left \{ i|q(x_i)=j\right\} Ij?={i∣q(xi?)=j}是叶子节点 j j j的实例集合。 O b j ( t ) = ∑ i = 1 [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + ∑ k Ω ( f k ) = ∑ i = 1 [ g i f t ( x i ) + 1 2 h i f t 2 ( x i ) ] + γ T + 1 2 λ ∑ j = 1 T w j 2 = ∑ j = 1 T [ ( ∑ i ∈ I j g i ) w j + 1 2 ( ∑ i ∈ I j h i + λ ) w j 2 ] + γ T Obj^{(t)}=\sum_{i=1}[g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\sum_{k}\Omega(f_k)=\sum_{i=1}[g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\gamma T+ \frac{1}{2}\lambda \sum^T_{j=1}w_j^2=\sum_{j=1}^T[(\sum_{i\in I_j}g_i)w_j+\frac{1}{2}(\sum_{i\in I_j}h_i+\lambda)w_j^2]+\gamma T Obj(t)=i=1∑?[gi?ft?(xi?)+21?hi?ft2?(xi?)]+k∑?Ω(fk?)=i=1∑?[gi?ft?(xi?)+21?hi?ft2?(xi?)]+γT+21?λj=1∑T?wj2?=j=1∑T?[(i∈Ij?∑?gi?)wj?+21?(i∈Ij?∑?hi?+λ)wj2?]+γT 所以在上式中只有 w j w_j wj?是未知数,对其求导等于0可得 w j ? = ∑ i ∈ I j g i ∑ i ∈ I j h i + λ w_j^*=\frac{\sum_{i\in I_j}g_i}{\sum_{i\in I_j}h_i + \lambda} wj??=∑i∈Ij??hi?+λ∑i∈Ij??gi??, 此时得到最优的 O b j ( t ) = ? 1 2 ∑ j = 1 T ( ∑ i ∈ I j g i ) 2 ∑ i ∈ I j h i + λ + λ T Obj^{(t)}=-\frac{1}{2}\sum_{j=1}^{T}\frac{(\sum_{i\in I_j}g_i)^2}{\sum_{i\in I_j}h_i + \lambda} + \lambda T Obj(t)=?21?∑j=1T?∑i∈Ij??hi?+λ(∑i∈Ij??gi?)2?+λT,利用该式来衡量树结构的好坏。数值越小,说明树越好。
2.两种防止过拟合的方法
3.找分割点算法1)贪心算法 遍历每个特征计算,找最优点即可 2)近似算法 对于海量数据而言,计算机没有足够的内存存储所有数据点,也就无法使用贪心算法。此时使用一种近似算法。
对于每个特征,只考察分位点可以减少计算复杂度。 该算法会首先根据特征分布的分位数提出候选划分点,然后将连续型特征映射到由这些候选点划分的桶中,然后聚合统计信息找到所有区间的最佳分裂点。在提出候选切分点时有两种策略:
直观上来看,Local 策略需要更多的计算步骤,而 Global 策略因为节点没有划分所以需要更多的候选点。 下图给出近似算法的具体例子,以三分位为例: 根据样本特征进行排序,然后基于分位数进行划分,并统计三个桶内的 G , H G,H G,H 值,最终求解节点划分的增益。 加权分位数缩略图 事实上, XGBoost 不是简单地按照样本个数进行分位,而是以二阶导数值 [公式] 作为样本的权重进行划分,如下: 我们知道模型的目标函数为:
O
b
j
(
t
)
≈
∑
i
=
1
n
[
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
]
+
∑
i
=
1
t
Ω
(
f
i
)
=
∑
i
=
1
n
[
g
i
f
t
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
+
1
2
g
i
2
h
i
]
+
Ω
(
f
t
)
+
C
=
∑
i
=
1
n
1
2
h
i
[
f
t
(
x
i
)
?
(
?
g
i
h
i
)
]
2
+
Ω
(
f
t
)
+
C
\begin{aligned} Obj^{(t)} & \approx \sum_{i=1}^{n}[g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\sum_{i=1}^t\Omega(f_i) \\ & = \sum_{i=1}^n[g_if_t(x_i)+\frac{1}{2}h_if_t^2(x_i)+\frac{1}{2}\frac{g_i^2}{h_i}]+\Omega(f_t)+C \\ &= \sum_{i=1}^{n}\frac{1}{2}h_i[f_t(x_i)-(-\frac{g_i}{h_i})]^2+\Omega(f_t)+C \end{aligned}
Obj(t)?≈i=1∑n?[gi?ft?(xi?)+21?hi?ft2?(xi?)]+i=1∑t?Ω(fi?)=i=1∑n?[gi?ft?(xi?)+21?hi?ft2?(xi?)+21?hi?gi2??]+Ω(ft?)+C=i=1∑n?21?hi?[ft?(xi?)?(?hi?gi??)]2+Ω(ft?)+C? 对于样本权值相同的数据集来说,找到候选分位点已经有了解决方案(GK 算法),但是当样本权值不一样时,该如何找到候选分位点呢?(作者给出了一个 Weighted Quantile Sketch 算法,这里将不做介绍。) 4.稀疏感知算法对于稀疏数据处理,xgb也提出了一种高效的处理算法,造成数据稀疏的三个原因:1)数据中缺失值较多,2)统计数据中0出现次数较多,3)人为编码造成0值很多,如one hot编码。 5.工程实现参考https://zhuanlan.zhihu.com/p/87885678 6.优缺点优点
缺点
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 20:26:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |