1 决策树概述
1.1 分类决策树
分类决策树模型是一种描述对实例进行分类的树形结构,由以下部分构成:
- 决策树
- 结点
- 有向边
- 内部结点
- 叶结点
决策树使用过一系列规则对数据进行分类的过程,遵循以下步骤
(1)构建根结点
(2)选择最优特征,以此分割训练数据集
(3)若子集被基本正确分类,构建叶结点,否则,继续选择新的最优特征
(4)重复以上两步,直到所有训练数据子集被正确分类
1.2 条件概率分布
决策树其实就是给定特征条件下类的条件概率分布 P ( Y ∣ X ) P(Y|X) P(Y∣X),是特征空间的一个划分,所划分的单元或区域互不相交,决策树的条件概率分布由各个单元给定条件下类的条件概率分布组成。
1.3 决策树的学习
已知:训练集
T
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
⋯
,
(
x
N
,
y
n
)
}
T=\left\{\left(x_1,y_1\right),\left(x_2,y_2\right),\cdots,\left(x_N,y_n\right)\right\}
T={(x1,y1),(x2,y2),⋯,(xN,yn)},其中,
x
i
=
(
x
i
(
1
)
,
x
i
(
2
)
,
⋯
,
x
i
(
n
)
)
x_i=\left( x_i^{(1)},x_i^{(2)},\cdots,x_i^{(n)}\right)
xi=(xi(1),xi(2),⋯,xi(n)),
y
i
=
{
1
,
2
,
⋯
,
K
}
,
i
=
1
,
2
,
⋯
,
N
y_i=\left\{ 1,2,\cdots,K\right\},i=1,2,\cdots,N
yi={1,2,⋯,K},i=1,2,⋯,N
目的:构造决策树,并对实例正确分类
本质:从训练数据集中归纳出一组分类规则,与训练数据集不相矛盾
假设空间:由无穷多个条件概率模型生成
一颗好的决策树:与训练数据矛盾较小,同时具有良好的泛化能力
策略:最小化损失函数
特征选择:递归选择最优特征
生成:对应特征空间的划分,直到所有训练子集被基本正确分类
剪枝:避免过拟合,具有更好的泛化能力
1.4 特征选择——信息增益
1.4.1 熵
表示随机变量的不确定性 H ( X ) = − ∑ i = 1 n p i log p i o r H ( p ) = − ∑ i = 1 n p i log p i H(X)=-\sum_{i=1}^n p_i\log p_i\quad or\quad H(p)=-\sum_{i=1}^n p_i \log p_i H(X)=−i=1∑npilogpiorH(p)=−i=1∑npilogpi随机变量取值等概率分布时,相应的熵最大。
1.4.2 条件熵
条件熵表示为
H
(
Y
∣
X
)
=
−
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
=
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
H
(
D
i
)
=
−
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
∑
k
=
1
K
∣
D
i
k
∣
∣
D
i
∣
log
2
∣
D
i
k
∣
∣
D
i
∣
H(Y|X)=-\sum_{i=1}^n p_i H(Y|X=x_i)=\sum_{i=1}^n\frac{\left|D_i\right|}{|D|}H\left(D_i\right)=-\sum_{i=1}^n \frac{\left|D_i\right|}{|D|}\sum_{k=1}^K \frac{\left|D_{ik}\right|}{\left|D_i\right|}\log_2 \frac{\left|D_{ik}\right|}{\left|D_i\right|}
H(Y∣X)=−i=1∑npiH(Y∣X=xi)=i=1∑n∣D∣∣Di∣H(Di)=−i=1∑n∣D∣∣Di∣k=1∑K∣Di∣∣Dik∣log2∣Di∣∣Dik∣
当熵和条件熵中的概率由数据估计得到时,称为经验熵或经验条件熵。
1.4.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)表示得知特征 A A A而使得 D D D的信息不确定性减少的程度(数值),依据信息增益选择特征将导致选择取值数量更多的特征。
1.4.4 信息增益比
信息增益比表示为 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)表示得知特征 A A A而使得 D D D的信息不确定性减少的程度(比例),依据信息增益选择特征将导致选择取值数量更少的特征。
2 决策树的生成
2.1 ID3算法
输入:训练数据集
D
D
D、特征集
A
A
A、阈值
ε
\varepsilon
ε
输出:决策树
T
T
T
(1)判断
T
T
T是否需要选择特征生成决策树
① 若
D
D
D中所有实例属于同一类,则
T
T
T为单结点树,记录实例类别,以此作为该结点的类标记,并返回
T
T
T;
② 若D中所有实例无任何特征(
A
=
∅
A=\empty
A=∅),则
T
T
T为单结点树,记录
D
D
D中实例个数最多的类别以此作为该结点的类标记,并返回
T
T
T;
(2)否则,计算
A
A
A中个特征的信息增益,并选择信息增益最大的特征
① 若的信息增益小于,则
T
T
T为单结点树,记录
D
D
D中实例个数最多的类别以此作为该结点的类标记,并返回
T
T
T;
② 否则,按照的每个可能值,将
D
D
D分为若干非空子集,将中实例个数最多的类别作为类标记,构建子结点,以结点和其他子结点构成
T
T
T,并返回
T
T
T;
(3)第
i
i
i个子结点,以作为训练集,作为特征集合,递归调用以上步骤,得到子树并返回
2.2 C4.5算法
输入:训练数据集
D
D
D、特征集
A
A
A、阈值
ε
\varepsilon
ε
输出:决策树
T
T
T
(1)判断T是否需要选择特征生成决策树
① 若
D
D
D中所有实例属于同一类,则
T
T
T为单结点树,记录实例类别,以此作为该结点的类标记,并返回
T
T
T
② 若
D
D
D中所有实例无任何特征(
A
=
∅
A=\empty
A=∅),则
T
T
T为单结点树,记录
D
D
D中实例个数最多的类别以此作为该结点的类标记,并返回
T
T
T
(2)否则,计算A中个特征的信息增益比,并选择信息增益比最大的特征
① 若的信息增益比小于,则T为单结点树,记录D中实例个数最多的类别以此作为该结点的类标记,并返回T
② 否则,按照的每个可能值,将D分为若干非空子集,将中实例个数最多的类别作为类标记,构建子结点,以结点和其他子结点构成T,并返回T
(3)第i个子结点,以作为训练集,作为特征集合,递归调用以上步骤,得到子树并返回
ID3和C4.5计算流程图如下:
2.3 ID3和C4.5的特点
(1)ID3使用信息增益选择特征,偏向于选择数值水平较多的特征;
(2)C4.5使用信息增益比选择特征,偏向于选择数值水平较少的特征;
(3)C4.5可以处理连续型数据和离散型特征;
(4)C4.5计算开销较大,在数据量大时不适用;
(5)C4.5算法可以处理缺失值。
2.4 剪枝
优秀的决策树,在具有良好的拟合和泛化能力的同时,还应具备深度小、叶结点少等特性。
误差:训练误差、测试误差
过拟合:训练误差低、测试误差高(模型复杂度过高)
欠拟合:训练误差高、测试误差高(模型复杂度过低)
剪枝:处理决策树的过拟合问题
预剪枝:生成过程中,对每个结点划分前进行估计,若当前结点的划分不能提升泛化能力,则停止划分,记当前结点为叶结点
后剪枝:生成一颗完整的决策树之后,自底而上地对内部结点考察,若此内部结点变为叶结点可以提升泛化能力,则做此替换
2.4.1 预剪枝
(1)限定决策树的深度(限定最大树深)
(2)设定一个信息增益(信息增益比)阈值
(3)设置某个指标,比较结点划分前后的泛化能力
2.4.2 后剪枝
(1)降低错误的剪枝(REP)(验证集)
(2)悲观错误剪枝(PEP)
(3)最小错误剪枝
2.5 CART算法
2.5.1 分类树
(1)基尼指数
假设现在有
K
K
K个类,样本点属于第
k
k
k个类的概率为
p
k
p_k
pk,则概率分布的基尼指数为
G
i
n
i
(
p
)
=
∑
k
=
1
K
p
k
(
1
−
p
k
)
=
1
−
∑
k
=
1
K
p
k
2
Gini(p)=\sum_{k=1}^K p_k\left(1-p_k\right)=1-\sum_{k=1}^K p_k^2
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2二分类:
G
i
n
i
(
p
)
=
2
p
(
1
−
p
)
Gini(p)=2p(1-p)
Gini(p)=2p(1−p)样本集
D
D
D的基尼指数:
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
2
Gini(D)=1-\sum_{k=1}^K \left( \frac{\left| C_k\right|}{|D|}\right)^2
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2基尼指数越小表明确定性越强。
(2)CART分类树算法
输入:训练数据集
D
D
D、特征集
A
A
A、阈值
输出:CART决策树
① 从根节点出发,进行操作,构建二叉树;
② 结点处的训练数据集为
D
D
D,计算现有特征对该数据集的基尼指数,并选择最优特征;
1)在特征
A
g
A_g
Ag下,对其可能取的每个值
a
g
a_g
ag,根据样本点对
A
g
=
a
g
A_g=a_g
Ag=ag的测试为“是”或“否”,将
D
D
D分割为
D
1
D_1
D1和
D
2
D_2
D2两个部分,计算
A
g
=
a
g
A_g=a_g
Ag=ag时的基尼指数;
2)选择基尼指数最小的那个值作为该特征下的最优切分点;
3)计算每个特征下的最优切分点,并比较在最优切分下的每个特征的基尼指数,选择基尼指数最小的那个特征,即最优特征;
③ 根据最优特征与最优切分点,从现结点生成两个子结点,将训练数据集按照特征分配到两个子结点中去;
④ 分别对两个子结点递归调用以上步骤,直到满足条件(如节点中的样本个数小于预设阈值、样本集的基尼系数小于预设阈值或没有更多特征),即生成CART树完毕。
2.5.2 回归树
(1)切分点
假设将输入空间划分为
M
M
M个单元
R
1
,
R
2
,
⋯
,
R
M
R_1,R_2,\cdots,R_M
R1,R2,⋯,RM,并且在每一个单元
R
m
R_m
Rm上有固定的输出值
c
m
c_m
cm则回归模型可表示为
f
(
X
)
=
∑
m
=
1
M
c
m
I
(
x
∈
R
m
)
f(X)=\sum_{m=1}^M c_mI\left( x\in R_m\right)
f(X)=m=1∑McmI(x∈Rm)平方误差表示为
∑
x
i
∈
R
m
(
y
i
−
f
(
x
i
)
)
2
\sum_{x_i\in R_m}\left(y_i-f\left(x_i\right)\right)^2
xi∈Rm∑(yi−f(xi))2最优输出为
C
^
m
=
A
v
e
r
a
g
e
(
y
i
∣
x
i
∈
R
m
)
\hat{C}_m=Average\left( y_i|x_i\in R_m\right)
C^m=Average(yi∣xi∈Rm)选择第
x
(
j
)
x^{(j)}
x(j)个变量和取值
s
s
s,分别作为切分变量和切分点,并定义两个区域:
R
1
(
j
,
s
)
=
{
x
∣
x
(
j
)
≤
s
}
,
R
2
(
j
,
s
)
=
{
x
∣
x
(
j
)
>
s
}
R_1(j,s)=\left\{x|x^{(j)}\leq s\right\},\quad R_2(j,s)=\left\{x|x^{(j)} > s\right\}
R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s}寻找最优切分变量
j
j
j和最优切分点
s
s
s:
min
j
,
s
[
min
c
1
∑
x
i
∈
R
1
(
j
,
s
)
(
y
i
−
c
1
)
2
+
min
c
2
∑
x
i
∈
R
2
(
j
,
s
)
(
y
i
−
c
2
)
2
]
\min_{j,s}\left[ \min_{c_1}\sum_{x_i\in R_1(j,s)} \left( y_i-c_1\right)^2 + \min_{c_2} \sum_{x_i\in R_2(j,s)} \left( y_i-c_2\right)^2\right]
j,smin
c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2
对固定输入变量
j
j
j可以找到最优切分点
s
s
s:
C
^
1
=
A
v
e
r
a
g
e
(
y
i
∣
x
i
∈
R
1
(
j
,
s
)
)
a
n
d
C
^
2
=
A
v
e
r
a
g
e
(
y
i
∣
x
i
∈
R
2
(
j
,
s
)
)
\hat{C}_1=Average\left(y_i|x_i\in R_1(j,s)\right) \quad and \quad \hat{C}_2=Average\left(y_i|x_i\in R_2(j,s)\right)
C^1=Average(yi∣xi∈R1(j,s))andC^2=Average(yi∣xi∈R2(j,s))
(2)CART回归树算法
输入:训练数据集
D
D
D、停止条件
输出:CART决策树
T
T
T
1)从根节点出发,进行操作,构建二叉树
2)结点处的训练数据集为
D
D
D,计算变量的最优切分点,并选择最优变量:
min
j
,
s
[
min
c
1
∑
x
i
∈
R
1
(
j
,
s
)
(
y
i
−
c
1
)
2
+
min
c
2
∑
x
i
∈
R
2
(
j
,
s
)
(
y
i
−
c
2
)
2
]
\min_{j,s}\left[ \min_{c_1} \sum_{x_i\in R_1(j,s)} \left( y_i-c_1\right)^2 + \min_{c_2} \sum_{x_i\in R_2(j,s)}\left( y_i-c_2\right)^2\right]
j,smin
c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2
① 在第
j
j
j个变量下,对其可能的每个值
s
s
s,根据样本点分割成和两部分,计算切分点为
s
s
s时的平方误差
② 选择平方误差最小的那个值作为该变量下的最优切分点
③ 计算每个变量下的切分点,并比较在最优切分点下的每个变量的平方误差,选择平方误差最小的那个变量,即最优变量
3)根据最优特征与最优切分点
(
j
,
s
)
(j,s)
(j,s),从现结点生成两个子结点,将训练数据集依变量分配到两个子结点中去,得到相应的输出值
R
1
(
j
,
s
)
=
{
x
∣
x
(
j
)
≤
s
}
,
R
2
(
j
,
s
)
=
{
x
∣
x
(
j
)
>
s
}
R_1(j,s)=\left\{ x|x^{(j)} \leq s\right\},\quad R_2(j,s)=\left\{ x| x^{(j)} > s\right\}
R1(j,s)={x∣x(j)≤s},R2(j,s)={x∣x(j)>s}
c
^
m
1
N
m
∑
x
i
∈
R
m
(
j
,
s
)
y
i
,
x
∈
R
m
,
m
=
1
,
2
\hat{c}_m \frac{1}{N_m}\sum_{x_i \in R_m(j,s)} y_i,\quad x\in R_m, \quad m=1,2
c^mNm1xi∈Rm(j,s)∑yi,x∈Rm,m=1,2
4)继续对两个子区域调用上述步骤,直至满足停止条件,即生成CART决策树
f
(
x
)
=
∑
m
=
1
M
c
^
m
I
(
x
∈
R
m
)
f(x)=\sum_{m=1}^M \hat{c}_m I\left( x\in R_m\right)
f(x)=m=1∑Mc^mI(x∈Rm)
(3)剪枝
损失函数
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_\alpha (T)=C(T) + \alpha |T|
Cα(T)=C(T)+α∣T∣,取值
α
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
\alpha=\frac{C(t)-C\left(T_t\right)}{|T_t|-1}
α=∣Tt∣−1C(t)−C(Tt),
C
(
t
)
C(t)
C(t)表示代价,即对训练数据集的拟合程度,
α
∣
T
∣
\alpha|T|
α∣T∣表示复杂度,即模型的泛化能力,当
α
→
0
\alpha \rightarrow 0
α→0时,泛化能力趋近于零,模型对现有数据拟合最好,得到完整的树模型;当
α
→
∞
\alpha \rightarrow \infty
α→∞时,泛化能力无限大,模型退化为单结点,对所有数据都适用,但拟合效果很差。若有
0
≤
α
0
<
α
1
<
α
2
<
⋯
<
α
n
<
α
n
+
1
<
+
∞
0\leq \alpha_0 < \alpha_1 < \alpha_2 < \cdots < \alpha_n <\alpha_{n+1}<+\infty
0≤α0<α1<α2<⋯<αn<αn+1<+∞,则每个值对应一颗决策树,剪枝程度不同。
输入:CART算法生成的决策树
输出:最优决策树
1)设
k
=
0
k=0
k=0,
T
=
T
0
T=T_0
T=T0
2)设
α
=
+
∞
\alpha=+\infty
α=+∞
3)自下而上地对内部结点
t
t
t计算
C
(
T
t
)
C(T_t)
C(Tt)、
∣
T
t
∣
|T_t|
∣Tt∣以及
g
(
t
)
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
,
α
=
min
(
α
,
g
(
t
)
)
g(t)=\frac{C(t)-C(T_t)}{|T_t|-1},\quad \alpha=\min (\alpha,g(t))
g(t)=∣Tt∣−1C(t)−C(Tt),α=min(α,g(t))
这里,
T
t
T_t
Tt表示以
t
t
t为根结点的子树,
C
(
T
t
)
C(T_t)
C(Tt)是对训练数据的预测误差,
∣
T
t
∣
|T_t|
∣Tt∣是
T
t
T_t
Tt的叶节点个数
4)自上而下地访问内部结点
t
t
t,如果有
g
(
t
)
=
α
g(t)=\alpha
g(t)=α,进行剪枝,并对叶结点
t
t
t以多数表决法决定其类,得到树
T
T
T
5)设
k
=
k
+
1
k=k+1
k=k+1,
α
k
=
α
\alpha_k = \alpha
αk=α,
T
k
=
T
T_k=T
Tk=T
6)如果
T
T
T不是由根结点单独构成的树,则回到步骤(4)
7)采用交叉验证法在子树序列
T
0
,
T
1
,
⋯
,
T
n
T_0,T_1,\cdots,T_n
T0,T1,⋯,Tn中寻找最优子树
T
α
T_\alpha
Tα
2.5.3 温馨提示
决策树的原理和sklearn中对决策树的实现是有区别的,本篇阐述决策树算法原理是为了形成对决策树算法形成系统性认知,这样才会明白决策树到底是怎么工作的,在使用时心中有数,报错或性能不理想时能够合理地归因。
参考资料:简博士 https://space.bilibili.com/406882224
(讲得很好,建议学习)