XGBoost:理论基础与模型应用(一) 决策树模型
主要参考[Ref.1-2],加以自己的实践、经验以及他人研究整理而成。如有事宜、讨论,请联系私信我或在下方评论。[1] 何龙.深入理解XGBoost[M].北京:机械工业出版社,2020.
[2] Chen T, Guestrin C. Xgboost: A scalable tree boosting system[C]//Proceedings of the 22nd acm sigkdd international conference on knowledge discovery and data mining. 2016: 785-794.
前言
\qquad XGBoost( eXtreme Gradient Boosting )模型由华盛顿大学的陈天奇博士于2016年提出,最开始作为分布式(深度)学习研究社区(DMLC)小组的研究项目之一。后因在希格斯(Higgs)机器学习挑战赛中大放异彩,被业界所熟知,在数据科学应用中广泛应用。目前,一些主流的互联网公司都已将XGBoost应用到其业务中,在各种数据科学竞赛中,XGBoost也成为竞赛者们夺冠的利器[Ref.1]。
\qquad 虽然近年来神经网络(especially DNN)越来越流行,但XGBoost仍旧在训练样本有限、训练时间短、调参知识缺乏的场景下具有独特的优势。像比如深度神经网络,XGBoost能够更好地处理表格数据,并具有更强的可解释性,另外具有易于调参、输入数据不变性等优势[Ref.1]。
\qquad 笔者在实际科研工作中,发现XGBoost相较其他机器学习方法而言,确实具有极大的优越之处。所以结合上述两篇参考文献,总结XGBoost模型的学习过程,并加以记录。
\qquad XGBoost是一种集成的树模型,所以有必要对相关树模型进行基础介绍。本篇为基础篇——树模型介绍。侧重于数学逻辑推导,图形介绍省略。
ID3算法
\qquad ID3算法由Ross Quinlan于1986年提出,该算法根据最大信息增益(Kullback–Leibler divergence)原则对数据集进行划分。从根节点开始,遍历所有未被使用的特征,计算特征的信息增益,选择信息增益最大的特征作为节点分裂的特征,然后为该特征的每一个可能取值分别生成子节点,再对子节点递归调用上述方法,直到所有特征的信息增益均小于某阈值或没有特征可以选择。最终对于每一个叶子节点,将其中样本数量最多的类作为该节点的类标签。
信息增益
\qquad
为了解决信息量的度量问题,1948年香农提出了信息熵的概念,解决了信息的度量问题。在此基础上学者们又提出了客观赋权法中的熵权法。信息熵,简称熵(entropy),是信息的期望值,表示随机变量不确定性的度量,记作:
E
n
t
r
o
p
i
e
(
p
)
=
−
∑
i
=
0
n
p
i
×
log
p
i
(1)
Entropie(p)= -\sum_{i=0}^{n}{p_i}\times\log{p_{i}}\tag{1}
Entropie(p)=−i=0∑npi×logpi(1)
\qquad
其中,
p
i
p_i
pi为事件
i
i
i发生的概率。熵只依赖于随机变量的分布,而不依赖其取值,熵越大,表示随机变量的不确定性越大。
\qquad
对一个样本集合
D
D
D来说,
∣
D
∣
|D|
∣D∣表示集合中样本的数量,样本集合中共有
k
k
k个分类,每个分类的概率为
∣
C
k
∣
∣
D
∣
\frac{|C_k|}{|D|}
∣D∣∣Ck∣,其中
∣
C
k
∣
|C_k|
∣Ck∣表示属于第k类的样本数量,则该样本集合的熵为:
E
n
t
r
o
p
i
e
(
D
)
=
−
∑
k
=
1
K
∣
C
k
∣
∣
D
∣
log
∣
C
k
∣
∣
D
∣
(2)
Entropie(D)=-\sum_{k=1}^{K}{\frac{|C_k|}{|D|}\log{\frac{|C_k|}{|D|}}} \tag{2}
Entropie(D)=−k=1∑K∣D∣∣Ck∣log∣D∣∣Ck∣(2)
\qquad
此外,信息增益中还使用到了条件熵(conditional entropy)的概念。设有随机变量(
X
,
Y
X,Y
X,Y),条件熵
E
n
t
r
o
p
i
e
(
Y
∣
X
)
Entropie(Y|X)
Entropie(Y∣X)表示在已知随机变量
X
X
X的条件下随机变量
Y
Y
Y的不确定性,条件熵
E
n
t
r
o
p
i
e
(
Y
∣
X
)
Entropie(Y|X)
Entropie(Y∣X)定义为在给定条件
X
X
X下,
Y
Y
Y的条件概率分布的熵对
X
X
X的数学期望:
E
n
t
r
o
p
i
e
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
E
n
t
r
o
p
i
e
(
Y
∣
X
=
x
i
)
(3)
Entropie(Y|X)=\sum_{i=1}^{n}{p_iEntropie(Y|X=x_i)}\tag{3}
Entropie(Y∣X)=i=1∑npiEntropie(Y∣X=xi)(3)
其中,
p
i
=
P
(
X
=
x
i
)
,
i
=
1
,
2
,
.
.
.
,
n
p_i=P(X=x_i),i=1,2,...,n
pi=P(X=xi),i=1,2,...,n。
\qquad
在决策树的学习过程中,信息增益是特征选择的一个重要指标。由信息熵的介绍可知,熵可以表示样本集合的不确定性(熵越大,不确定性越大),因此当通过某一特征对样本集合进行划分时,可通过划分前后熵的差值来衡量该特征对样本集合划分的好坏,差值越大,表示不确定性降低越多,则信息增益越大。假设划分前样本集合的熵为
E
n
t
r
o
p
i
e
(
D
)
Entropie(D)
Entropie(D),按特征
A
A
A划分后样本集合的熵为
E
n
t
r
o
p
i
e
(
D
∣
A
)
Entropie(D|A)
Entropie(D∣A),则信息增益为:
i
n
f
o
g
a
i
n
=
E
n
t
r
o
p
i
e
(
D
)
−
E
n
t
r
o
p
i
e
(
D
∣
A
)
(4)
info gain=Entropie(D)-Entropie(D|A)\tag{4}
infogain=Entropie(D)−Entropie(D∣A)(4)
\qquad
信息增益表示用特征
A
A
A对样本集合进行划分时不确定性的减少程度。换句话说,按照特征
A
A
A对样本进行划分,分类后数据得确定性是否比之前更高。通过计算信息增益,我们可以选择合适的特征作为决策树节点分裂的依据。
ID3算法过程
- 从根节点开始分裂。
- 节点分裂之前,遍历所有未被使用的特征,计算特征的信息增益。
- 选取信息增益最大的特征作为节点分裂的特征,并对该特征的每个可能的取值生成一个子节点。
- 对子节点循环执行步骤2、3,直到所有特征信息增益均小于某阈值或没有特征可以选择。
\qquad 当一个特征可能的取值较多时,根据该特征更容易得到纯度更好地样本子集,信息增益会更大,因此ID3算法会偏向选择取值较多的特征,所以其不适用于极端情况下连续取值的特征选择。
C4.5
\qquad
C4.5是ID3算法的扩展,其构建决策树的算法过程也与ID3算法相似,唯一的区别在于C4.5不再使用信息增益,而是采用信息增益比进行特征选择,解决了ID3算法不能处理连续取值特征的问题。
\qquad
信息增益比,是在信息增益的基础上乘以一个调节参数,特征的取值个数越多,该参数越小,反之越大。信息增益比定义如下:
g
a
i
n
R
(
D
,
F
)
=
g
a
i
n
(
D
,
F
)
E
n
t
r
o
p
i
e
F
(
D
)
(5)
gain_{R}(D,F)=\frac{gain(D,F)}{Entropie_{F}(D)}\tag{5}
gainR(D,F)=EntropieF(D)gain(D,F)(5)
其调节参数为
E
n
t
r
o
p
i
e
F
(
D
)
Entropie_{F}(D)
EntropieF(D)的倒数,
E
n
t
r
o
p
i
e
F
(
D
)
Entropie_{F}(D)
EntropieF(D)表示数据集
D
D
D以特征
F
F
F作为随机变量的熵,其中
n
n
n为特征
F
F
F的取值个数。定义如下:
E
n
t
r
o
p
i
e
F
(
D
)
=
−
∑
i
=
1
n
D
i
D
log
D
i
D
(6)
Entropie_{F}(D)=-\sum_{i=1}^{n}{\frac{D_i}{D}\log{\frac{D_i}{D}}}\tag{6}
EntropieF(D)=−i=1∑nDDilogDDi(6)
CART
\qquad XGBoost的弱学习器为CART树(Classification And Regression Tree),其每一棵决策树学习的是目标值与之前所有树预测值之和的残差,多棵决策树共同决策,最后将所有树的结果累加起来作为最终的预测结果。CART于1984年由Breiman等人提出,在数据分析和机器学习领域受到广泛关注,其具体可分为分类树和回归树。不同之处在于:分类树的预测值是离散的,通常会将叶子节点中多数样本的类别作为该节点的预测类别;回归树的预测值是连续的,通常会将叶子节点中多数样本的平均值作为该节点的预测值。
\qquad CART的核心思想是二分递归分裂:首先按一定的度量方法选出最优特征及切分点,然后通过该特征及切分点将样本集划分为两个子样本集,即由该节点生成两个子节点,依次递归该过程直到满足结束条件。因此,CART算法生成的决策树均为二叉树。通常CART算法在生成决策树之后,采用剪枝算法对生成的决策树进行剪枝,防止对噪声数据或者一些孤立点的过度学习导致过拟合。
CART生成
\qquad CART树中,分类树采用基尼指数最小化进行特征选择,回归树则采用平方误差最小化。
分类树的生成
\qquad
CART生成树的过程是自上而下进行的,从根节点开始,通过特征选择进行分裂。CART采用基尼指数作为特征选择的度量方式生成分类树,通过基尼指数最小化进行最优特征选择,决定最优切分点。基尼指数的定义为:
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
K
p
k
2
(7)
Gini(D)=1-\sum_{k=1}^{K}{p_{k}^2}\tag{7}
Gini(D)=1−k=1∑Kpk2(7)
式中:
D
D
D为样本集;
K
K
K表示类别个数;
p
k
p_k
pk表示类别为
k
k
k的样本占所有样本的比值。由此可知,样本分布越集中,则基尼指数越小。当所有样本都是一个类别时,基尼指数为0;样本分布越均匀,则基尼指数越大。对于二分类问题可进行如下推导:
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
2
p
k
2
=
2
p
1
(
1
−
p
1
)
(8)
Gini(D)=1-\sum_{k=1}^{2}{p_k^2}=2p_1(1-p_1)\tag{8}
Gini(D)=1−k=1∑2pk2=2p1(1−p1)(8)
\qquad
基尼系数越大,表明经过A特征分裂后的样本不确定性越大,反之,不确定性越小。针对所有可能的特征及所有可能的切分点,分别计算分裂后的基尼指数,选择基尼指数最小的特征及切分点作为最优特征和最优切分点。通过最优特征和最优切分点对节点进行分裂,生成子节点,即将原样本集划分成了两个子样本集,然后对子节点递归调用上述步骤,直到满足停止条件。一般来说,停止条件是基尼指数小于某阈值或者节点样本数小于一定阈值。因此,其生成步骤为:
- 从根节点开始分裂。
- 节点分裂之前,计算所有可能的特征及它们所有可能的切分点分裂后的基尼指数。
- 选出基尼指数最小的特征及其切分点作为最优特征和最优切分点。通过最优特征和最优切分点对节点进行分裂,生成两个子节点。
- 对新生成的子节点递归步骤2、3,直到满足条件。
- 生成分类树。
回归树的生成
\qquad
回归树是预测值为连续值得决策树,一般将叶子节点所有样本的平均值作为该节点得预测值。CART算法生成回归树的方法于生成分类树不同,其不再通过基尼指数进行特征选择,而是采用平方误差最小化,如下式:
L
=
∑
x
i
∈
R
n
(
y
i
−
f
(
x
i
)
)
2
(9)
L=\sum_{{x_i}\in{R_n}}{(y_i-f(x_i))^2}\tag{9}
L=xi∈Rn∑(yi−f(xi))2(9)
\qquad
回归树在进行特征选择时,对于所有特征及切分点,分别计算分裂后子节点的平方误差之和,选择平方误差之和最小的作为最优特征和最优切分点。其生成步骤如下:
- 从根节点开始分裂。
- 节点分裂之前,计算所有可能的特征及它们所有可能的切分点分裂后的平方误差。
- 如果所有平方误差均相同或减小值小于某一阈值,或者节点包含的样本数小于某一阈值,则分裂停止;否则,选择使平方误差最小的特征和切分点作为最优特征和最优切分点进行分裂,生成两个子节点。
- 对于每一个生成的新节点,递归执行步骤2、步骤3,直到满足停止条件。
总结
\qquad XGBoost是一种集成CART树的集成学习模型,以上便是对几种常用决策树模型的介绍。敬请等待后续文章。