基础知识
一、决策树
1. 决策树的定义
分类决策树模型是一种描述对实例进行分类的树形结构,决策树由结点(node)和有向边(directed edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类。
2.决策树是怎么工作的
决策树学习本质上是从训练数据集中归纳出一组分类规则。与训练数据集不相矛盾的决策树(即能对训练数据进行正确分类的决策树)可能有多个,也可能一个都没有。我们需要的是一个与训练数据矛盾较小的决策树,同时具有很好的泛化能力。
3.决策树的构建方法
决策树学习的策略是以损失函数为目标函数的最小化。
(1) 构建根结点,将所有的训练数据都放在根结点。
(2) 选择一个最优特征,按照这一特征将训练数据集分割成子集,使得各个子集有一个当前条件下最好的分类。
(3) 如果这些子集已经能够被基本正确分类,那么构建 叶结点,并将这些子集分到所对应的叶结点去;如果还有子集不能被基本正确分类,那么就对这些子集选择新的最优特征,继续对其进行分割,构建相应的结点。
(4) 如此递归地进行下去,直至所有训练数据子集被基本正确分类,或者没有合适的特征为止。最后每个子集都被分到叶结点上,即都有了明确的类。这就生成了一颗决策树。
4. 常见的决策树构建算法
- ID3使用信息增益作为选择特征的准则;
- C4.5使用信息增益比作为选择特征的准则
- CART使用Gini指数作为选择特征的准则
5. 决策树生成的三个重要问题
- 如何选择分裂的特征
- 数据如何分割
- 什么时候停止分裂
6. 特征选择问题
直观上,如果一个特征具有更好的分类能力,或者说,按照这一特征将训练数据集分割成子集,使得各个子集在当前条件下有最好的分类,那么就更应该选择这个特征。信息增益(information gain)可以很好地表示这一直观的准则。
(1) 熵—随机变量不确定性的度量
设X是一个取有限值的离散随机变量,其概率分布为:
P
(
X
=
x
i
)
=
p
i
P(X=x_i)=p_i
P(X=xi)=pi
则随机变量X的熵定义为:
H
(
X
)
=
−
∑
i
=
1
n
p
i
l
o
g
p
i
H(X)=-\sum_{i=1}^{n}p_ilog {p_i}
H(X)=−i=1∑npilogpi熵越大,随机变量的不确定性就越大
由定义可知,熵只依赖于X的分布,而与X的取值无关,则可将X的熵记作
H
(
p
)
H(p)
H(p),即
H
(
p
)
=
−
∑
i
=
1
n
p
i
l
o
g
p
i
H(p)=-\sum_{i=1}^{n}p_ilog {p_i}
H(p)=−i=1∑npilogpi
(2) 条件熵
表示在已知随机变量X的条件下随机变量Y的不确定性。
随机变量X给定的条件下随机变量Y的条件熵(conditional entropy)
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X),定义为X给定条件下Y的条件概率分布的熵对X的数学期望。
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H(Y|X)=\sum_{i=1}^n{p_iH(Y|X=x_i)}
H(Y∣X)=i=1∑npiH(Y∣X=xi)
(3) 信息增益
表示得知特征X的信息而使得类Y的信息的不确定性减少的程度。
定义:特征A对训练数据集D的信息增益g(D,A),定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵H(D|A)之差,即
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A) = H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)一般地,熵H(Y)与条件熵H(Y|X)之差称为互信息,决策树学习中的信息增益等价于训练数据集中类与特征的互信息
(4) 信息增益的算法
基于信息增益准则 的特征选择方法是:对训练数据集(或子集)D,计算其每个特征的信息增益,并比较它们的大小,选择信息增益最大的特征。
设训练数据集为D,|D|表示其样本个数。设有K个类 C k , k = 1 , 2 , . . . , K , C k 为 属 于 类 C k 的 样 本 个 数 , ∑ k = 1 K C k = ∣ D ∣ . C_k, k=1,2,...,K, C_k为属于类C_k的样本个数,\sum_{k=1}^K{C_k}=|D|. Ck,k=1,2,...,K,Ck为属于类Ck的样本个数,∑k=1KCk=∣D∣.
设
特
征
A
有
n
个
不
同
的
取
值
a
1
,
a
2
,
.
.
.
,
a
n
,
设特征A有n个不同的取值{a_1, a_2,...,a_n},
设特征A有n个不同的取值a1,a2,...,an,
根
据
特
征
A
的
取
值
将
D
划
分
为
n
个
子
集
D
1
,
D
2
,
.
.
.
,
D
n
,
∣
D
i
∣
为
D
i
的
样
本
个
数
,
∑
i
=
1
n
根据特征A的取值将D划分为n个子集D_1,D_2,...,D_n,|D_i|为D_i的样本个数,\sum_{i=1}^n
根据特征A的取值将D划分为n个子集D1,D2,...,Dn,∣Di∣为Di的样本个数,∑i=1n
记
子
集
D
i
中
属
于
类
C
k
的
样
本
集
合
为
D
i
k
,
即
D
i
k
=
D
i
∩
C
k
,
∣
D
i
k
∣
为
D
i
k
的
样
本
个
数
。
记子集D_i中属于类C_k的样本集合为D_{ik},即D_ik=D_i∩C_k,|D_ik|为D_{ik}的样本个数。
记子集Di中属于类Ck的样本集合为Dik,即Dik=Di∩Ck,∣Dik∣为Dik的样本个数。
输入:训练数据集D和特征A
输出:特征A对训练数据集D的信息增益g(D,A)
(1) 计算数据集D的经验熵H(D)
H
(
D
)
=
−
∑
k
=
1
K
∣
C
k
∣
∣
D
∣
l
o
g
2
∣
C
k
∣
∣
D
∣
H(D)=-\sum_{k=1}^K\frac{{|C_k|}}{|D|}log_2\frac{{|C_k|}}{|D|}
H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣
(2) 计算特征A对数据集D的经验条件熵H(D|A)
H
(
D
∣
A
)
=
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
H
(
D
i
)
=
−
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
∑
k
=
1
K
∣
D
i
k
∣
∣
D
i
∣
l
o
g
2
∣
D
i
k
∣
∣
D
i
∣
H(D|A)=\sum_{i=1}^n\frac{{|D_i|}}{|D|}H(D_i)=-\sum_{i=1}^n\frac{{|D_i|}}{|D|}\sum_{k=1}^{K}\frac{{|D_{ik}|}}{|D_i|}log_2\frac{{|D_{ik}|}}{|D_i|}
H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n∣D∣∣Di∣k=1∑K∣Di∣∣Dik∣log2∣Di∣∣Dik∣
(3) 计算信息增益
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)
- 一个例子(统计学习方法缩减版)
贷款申请样本数据表
ID | 年龄 | 有工作 | 信贷情况 | 类别 |
---|---|---|---|---|
1 | 青年 | 否 | 一般 | 否 |
2 | 青年 | 是 | 好 | 否 |
3 | 青年 | 是 | 好 | 是 |
4 | 中年 | 否 | 好 | 是 |
5 | 青年 | 是 | 一般 | 否 |
6 | 中年 | 否 | 一般 | 否 |
7 | 老年 | 是 | 一般 | 否 |
8 | 老年 | 是 | 一般 | 是 |
解: 首先计算经验熵H(D)
H
(
D
)
=
−
5
8
l
o
g
2
5
8
−
3
8
l
o
g
2
3
8
=
0.9544
H(D)=-\frac{5}{8}log_2\frac{5}{8}-\frac{3}{8}log_2\frac{3}{8}=0.9544
H(D)=−85log285−83log283=0.9544
然后计算各特征对数据集D的信息增益。分别以
A
1
A_1
A1,
A
2
A_2
A2,
A
2
A_2
A2,
A
3
A_3
A3表示年龄、有工作、信贷情况3个特征,则
(1)
g
(
D
,
A
1
)
=
H
(
D
)
−
[
4
8
H
(
D
1
)
+
2
8
H
(
D
2
)
+
2
8
H
(
D
3
)
]
=
H
(
D
)
−
[
4
8
(
−
3
4
l
o
g
2
3
4
−
1
4
l
o
g
2
1
4
)
+
2
8
(
−
1
2
l
o
g
2
1
2
−
1
2
l
o
g
2
1
2
)
+
2
8
(
−
1
2
l
o
g
2
1
2
−
1
2
l
o
g
2
1
2
)
]
=
0.0871
g(D,A_1)=H(D)-[\frac{4}{8}H(D_1)+\frac{2}{8}H(D_2)+\frac{2}{8}H(D_3)] \\=H(D)-[\frac{4}{8}(-\frac{3}{4}log_2\frac{3}{4}-\frac{1}{4}log_2\frac{1}{4})+\\\frac{2}{8}(-\frac{1}{2}log_2\frac{1}{2}-\frac{1}{2}log_2\frac{1}{2})+\\ \frac{2}{8}(-\frac{1}{2}log_2\frac{1}{2}-\frac{1}{2}log_2\frac{1}{2})] =0.0871
g(D,A1)=H(D)−[84H(D1)+82H(D2)+82H(D3)]=H(D)−[84(−43log243−41log241)+82(−21log221−21log221)+82(−21log221−21log221)]=0.0871
这里
D
1
,
D
2
,
D
3
D_1, D_2, D_3
D1,D2,D3分别是D中
A
1
A_1
A1(年龄)取值为青年、中年和老年的样本子集。
(2)
g
(
D
,
A
2
)
=
H
(
D
)
−
[
3
8
H
(
D
1
)
+
5
8
H
(
D
2
)
]
=
H
(
D
)
−
[
3
8
(
−
1
3
l
o
g
2
1
3
−
2
3
l
o
g
2
2
3
)
+
5
8
(
−
3
5
l
o
g
2
3
5
−
2
5
l
o
g
2
2
5
)
]
=
0.0880
g(D,A_2)=H(D)-[\frac{3}{8}H(D_1)+\frac{5}{8}H(D_2)] \\=H(D)-[\frac{3}{8}(-\frac{1}{3}log_2\frac{1}{3}-\frac{2}{3}log_2\frac{2}{3})+\\\frac{5}{8}(-\frac{3}{5}log_2\frac{3}{5}-\frac{2}{5}log_2\frac{2}{5})] =\\0.0880
g(D,A2)=H(D)−[83H(D1)+85H(D2)]=H(D)−[83(−31log231−32log232)+85(−53log253−52log252)]=0.0880
(3)
g
(
D
,
A
3
)
=
H
(
D
)
−
[
5
8
H
(
D
1
)
+
3
8
H
(
D
2
)
]
=
H
(
D
)
−
[
5
8
(
−
1
5
l
o
g
2
1
5
−
4
5
l
o
g
2
4
5
)
+
3
8
(
−
2
3
l
o
g
2
2
3
−
1
3
l
o
g
2
1
3
)
]
=
0.2037
g(D,A_3)=H(D)-[\frac{5}{8}H(D_1)+\frac{3}{8}H(D_2)] \\=H(D)-[\frac{5}{8}(-\frac{1}{5}log_2\frac{1}{5}-\frac{4}{5}log_2\frac{4}{5})+\\\frac{3}{8}(-\frac{2}{3}log_2\frac{2}{3}-\frac{1}{3}log_2\frac{1}{3})] =\\0.2037
g(D,A3)=H(D)−[85H(D1)+83H(D2)]=H(D)−[85(−51log251−54log254)+83(−32log232−31log231)]=0.2037
最后,比较各特征的信息增益值。由于特征
A
3
A_3
A3(信贷情况)的信息增益值最大,所以选择特征
A
3
A_3
A3作为最优特征。
(4) 信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比(information gain ratio)可以对这一问题进行校正。这是特征选择的另一准则。
特征A对训练数据集D的信息增益比 g R ( D , A ) g_R(D,A) gR(D,A) 定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵 H A ( D ) H_A(D) HA(D) 之比,即
g
R
(
D
,
A
)
=
g
(
D
,
A
)
H
A
(
D
)
g_R(D,A)=\frac{g(D,A)}{H_A(D)}
gR(D,A)=HA(D)g(D,A)
其中,
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=1n∣D∣∣Di∣log2∣D∣∣Di∣,n是特征A取值的个数。
7. 决策树的生成
(1) ID3算法思想
算法核心思想:在决策树各个结点上应用信息增益准则选择特征,递归地构建决策树。具体方法是:从根结点(root node)开始,对结点计算所有可能的特征的信息增益,选择信息增益最大的特征作为结点的特征,由该特征的不同取值建立子结点;再对子结点递归地调用以上方法, 构建决策树;直到所有特征的信息增益均很小或没有特征可以选择为止。最后得到一颗决策树。ID3相当于用极大似然法进行概率模型的选择。
(2) ID3算法
输入:训练数据集D,特征集A阈值
ϵ
\epsilon
ϵ
输出: 决策树T
(1) 若D中所有实例属于同一类 C k C_k Ck,则T为单结点树,并将类 C k C_k Ck作为该结点的类标记,返回T。
(2) 若A= ∅ \varnothing ∅,则T为单结点树,并将D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回T。
(3) 否则,计算A中各特征对D的信息增益,选择信息增益最大的特征 A g A_g Ag。
(4) 如果 A g A_g Ag的信息增益小于阈值 ε \varepsilon ε,则置T为单结点树,并将D中实例数最大的类 C k C_k Ck作为该结点的类标记,返回T;
(5) 否则,对 A g A_g Ag的每一可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai将D分割为若干非空子集 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T;
(6) 对
i
i
i个子结点,以
D
i
D_i
Di为训练集,以
A
−
A
g
A-{A_g}
A−Ag 为特征集,递归地调用步(1)~步(5),得到子树
T
i
T_i
Ti,返回
T
i
T_i
Ti由于ID3算法只有树的生成,所以该算法生成的树容易产生过拟合。
8. C4.5的生成算法
输入: 训练数据集D,特征集A阈值 ε \varepsilon ε;
输出: 决策树T
(1) 如果D中所有实例属于同一类 C k C_k Ck,则置T为单结点树,并将 C k C_k Ck作为该结点的类,返回T;
(2) 如果 A = ∅ A=\varnothing A=∅,则置T为单结点树,并将D中实例数最大的类 C k C_k Ck作为该结点的类,返回T;
(3) 否则,计算A中各特征对D的信息增益比,选择信息增益比最大的类 C k C_k Ck 作为该结点的类,返回T;
(4) 如果 A g A_g Ag的信息增益比小于阈值 ε \varepsilon ε, 则置T为单结点树,并将D中实例数最大的类 C k C_k Ck 作为该结点的类,返回T
(5) 否则,对 A g A_g Ag的每一可能值 a i a_i ai,依 A g = a i A_g=a_i Ag=ai将D分割为子集若干非空 D i D_i Di,将 D i D_i Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树T,返回T
(6) 对结点i,以 D i D_i Di为训练集,以 A − A g A-{A_g} A−Ag 为特征集,递归地调用步(1)~(5),得到子树 T i T_i Ti
9. 决策树过拟合的避免—剪枝算法
决策树的剪枝通过极小化决策树整体的损失函数或代价函数来实现。设树T的叶结点个数为|T|,t是树T的叶结点,该叶结点有 N t N_t Nt个样本点,其中 k k k类的样本点有 N t k N_{tk} Ntk 个, k = 1 , 2 , . . . , K , H t ( T ) k=1,2,...,K,H_t(T) k=1,2,...,K,Ht(T) 为叶结点t上的经验熵, α ≥ 0 \alpha\geq0 α≥0为参数,则决策树学习的损失函数可以定义为
C
α
(
T
)
=
∑
i
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
C_\alpha{(T)}=\sum_{i=1}^{|T|}N_tH_t(T)+\alpha|T|
Cα(T)=i=1∑∣T∣NtHt(T)+α∣T∣
其中经验熵为
H
t
(
T
)
=
−
∑
K
N
t
k
N
t
l
o
g
N
t
k
N
t
H_t(T)=-\sum_K\frac{N_{tk}}{N_t}log\frac{N_{tk}}{N_t}
Ht(T)=−K∑NtNtklogNtNtk
10. XGBoost: A Scalable Tree Boosting System
Abstract
- XGBoost算法:一种新的稀疏感知算法,用于稀疏数据和用于近似数学习的加权分位数草图。
- 比当时流行解决方案快十倍以上,在分布式或内存有限的设置下可以扩展到数十亿个示例。
Introduction
- Innovation
- 新的树学习算法用于处理稀疏数据
- 理论上合理的加权分位草图过程使得能够在近似树学习中处理实例权重
- 并行和分布式计算
- Contribution
- 设计并构建了一个高度可扩展的端到端树增强系统
- 提出了一种理论上合理的加权分位数略图,用于高效的建议的计算
- 提出了一种有效的基于缓存感知的核外树学习块结构
- Regularized Learning Objective
(1) 对于含有m个特征n个样例的数据集 D = { ( x i , y i ) } ( ∣ D ∣ = n , x i ∈ R m , y i ∈ R ) \mathcal{D}=\{(x_i, y_i)\} (|\mathcal{D}| = n, x_i \in \mathbb{R}^m, y_i \in \mathbb{R}) D={(xi,yi)}(∣D∣=n,xi∈Rm,yi∈R), 集成模型使用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=1Kfk(Xi),fk∈F
F = { f ( x ) = w ( q ( x ) ) } ( q : R m ) → T , ω ∈ R T \mathcal{F} = \{f(x) = w_(q(x))\}(q: \mathbb{R}^m)\rightarrow T, \omega \in \mathbb{R}^T F={f(x)=w(q(x))}(q:Rm)→T,ω∈RT. q表示将示例映射到相应叶索引的每个树的结构。 T是树中叶子结点的数量。每一个 f k f_k fk对应于一个独立的树结构q和叶子权重 ω \omega ω。使用 w i w_i wi表示第i个叶子结点的分数。
(2) 目标函数
L ( ϕ ) = ∑ i l ( y ^ i , y i ) + ∑ k Ω ( f k ) \mathcal{L}(\phi) = \sum_{i}l(\hat{y}_i, y_i) + \sum_{k} \Omega(f_k) L(ϕ)=∑il(y^i,yi)+∑kΩ(fk)
其中 Ω ( f ) = γ T + 1 2 λ ∣ ∣ ω ∣ ∣ 2 \Omega(f) = \gamma T + \frac{1}{2}\lambda||\omega||^2 Ω(f)=γT+21λ∣∣ω∣∣2
其中, l l l测量预测 y ^ i \hat{y}_i y^i和目的 y i y_i yi之间的差的可微凸损失函数。第二个为惩罚项。
XGBoost算法详解
1.与GBDT算法不同—目标函数
O
b
j
(
t
)
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
(
t
−
1
)
+
f
t
(
x
i
)
)
+
Ω
(
f
t
)
+
c
o
n
s
t
a
n
t
Obj^{(t)}=\sum_{i=1}^{n}l(y_i, \hat{y}_i^{(t-1)}+ f_t(x_i)) + \Omega(f_t) + constant
Obj(t)=∑i=1nl(yi,y^i(t−1)+ft(xi))+Ω(ft)+constant
用泰勒展开式来近似我们原来的目标:
f
(
x
+
Δ
x
)
≃
f
(
x
)
+
f
′
(
x
)
Δ
x
+
1
2
f
′
′
(
x
)
Δ
x
2
f(x + \Delta x )\simeq f(x) + f'(x) \Delta x + \frac{1}{2}f''(x)\Delta x^2
f(x+Δx)≃f(x)+f′(x)Δx+21f′′(x)Δx2
d
e
f
i
n
e
:
g
i
=
∂
y
^
(
t
−
1
)
l
(
y
i
,
y
^
(
t
−
1
)
)
,
h
i
=
∂
y
^
(
t
−
1
)
2
l
(
y
i
,
y
^
(
t
−
1
)
)
define:g_i=\partial_{\hat{y}^{(t-1)}}l(y_i, \hat{y}^{(t-1)}), h_i = \partial_{\hat{y}^{(t-1)}}^2l(y_i,\hat{y}^{(t-1)})
define:gi=∂y^(t−1)l(yi,y^(t−1)),hi=∂y^(t−1)2l(yi,y^(t−1))
O
b
j
(
t
)
≃
∑
i
=
1
n
[
l
(
y
i
,
y
^
i
(
t
−
1
)
)
+
g
i
f
t
2
(
x
i
)
+
1
2
h
i
f
t
2
(
x
i
)
]
+
Ω
(
f
t
)
+
c
o
n
s
t
a
n
t
Obj^{(t)}\simeq \sum_{i=1}^{n}[l(y_i, \hat{y}_i^{(t-1)})+g_if_t^2(x_i)+\frac{1}{2}h_if_t^2(x_i)]+\Omega(f_t)+constant
Obj(t)≃∑i=1n[l(yi,y^i(t−1))+gift2(xi)+21hift2(xi)]+Ω(ft)+constant
2. XGBoost的核心算法思想
(1) 不断添加树,不断地进行特征分裂来生长一棵树,每次添加一个树,其实是学习一个新函数f(x),去拟合上次预测的残差。
(2) 当我们训练完成得到k颗树,我们要预测一个样本的分数,其实就是根据这个样本的特征,在每棵树中会落到对应的一个叶子节点,每个叶子节点就对应一个分数。
(3) 最后只需要将每棵树对应的分数加起来就就是该样本的预测值。
XGBoost需要将多棵树的得分累加得到最终的预测得分(每次迭代,都在现有树的基础上,增加一棵树去拟合前面树的预测结果与真实值之间的残差)
那么接下来,选取一个f使得我们的目标函数尽量最大地降低,f可以使用泰勒展开公式近似。
实质是把样本分配到叶子结点会对应一个obj,优化过程就是obj优化。也就是分裂节点到叶子不同的组合,不同的组合对应不同obj,所有的优化围绕这个思想展开。
(4) 树该怎么生长?
一棵树的生成是由一个结点一分为二,然后不断分裂最终形成整棵树,那么树是怎么分裂的呢?
枚举所有不同树结构的贪心法:不断地枚举不同树的结构,然后利用打分函数来寻找一个最优结构的树,接着加入到模型中,不断重复这样的操作。这个寻找的过程就是使用的贪心算法,选择一个feature分裂,计算loss function最小值,然后再选一个feature分类,又得到一个loss function最小值,枚举完,找一个效果最好的,把树给分裂,就得到了小树苗。
总而言之,XGBoost使用了和CART回归树一样的想法,利用贪婪算法,遍历所有特征的所有特征划分点,不同的是使用的目标函数不一样。具体做法就是分裂后的目标函数值比单子叶子节点的目标函数的增益,同时为了限制树生长过深,还加了个阈值,只有当增益大于该阈值才进行分裂。从而继续分裂,形成一棵树,再形成一棵树,每次在上一次的预测基础上取最优进一步分裂/建树。
(4) 如何停止树的循环生成
凡是这种循环迭代的方式必定有停止条件,设置树的最大深度,当样本权重和小于阈值时停止生长以防止过拟合。
- 当引入的分裂带来的增益小于设定阀值的时候,我们可以忽略掉这个分裂,所以并不是每一次分裂loss function整体都会增加的,有点预剪枝的意思,阈值参数为(即正则项里叶子节点数T的系数);
- 当树达到最大深度时则停止建立决策树,设置一个超参数max_depth,避免树太深导致学习局部样本,从而过拟合;
- 样本权重和小于设定阈值时则停止建树。什么意思呢,即涉及到一个超参数-最小的样本权重和min_child_weight,和GBM的 min_child_leaf 参数类似,但不完全一样。大意就是一个叶子节点样本太少了,也终止同样是防止过拟合;
3. XGBoost与GBDT有什么不同
除了算法上与传统的GBDT有一些不同外,XGBoost还在工程实现上做了大量的优化。总的来说,两者之间的区别和联系可以总结成以下几个方面。
- GBDT是机器学习算法,XGBoost是该算法的工程实现。
- 在使用CART作为基分类器时,XGBoost显式地加入了正则项来控制模 型的复杂度,有利于防止过拟合,从而提高模型的泛化能力。
- GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代 价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。
- 传统的GBDT采用CART作为基分类器,XGBoost支持多种类型的基分类 器,比如线性分类器。
- 传统的GBDT在每轮迭代时使用全部的数据,XGBoost则采用了与随机 森林相似的策略,支持对数据进行采样。
- 传统的GBDT没有设计对缺失值进行处理,XGBoost能够自动学习出缺失值的处理策略。
4. 为什么XGBoost要用泰勒展开,优势在哪里?
XGBoost使用了一阶和二阶偏导, 二阶导数有利于梯度下降的更快更准. 使用泰勒展开取得函数做自变量的二阶导数形式, 可以在不选定损失函数具体形式的情况下, 仅仅依靠输入数据的值就可以进行叶子分裂优化计算, 本质上也就把损失函数的选取和模型算法优化/参数选择分开了. 这种去耦合增加了XGBoost的适用性, 使得它按需选取损失函数, 可以用于分类, 也可以用于回归。
References
[1] 终于有人说清楚了–XGBoost算法 - mantch - 博客园 (cnblogs.com)
[2] XGBoost: A Scalable Tree Boosting System.