第五章 决策树
对于决策树最直观的理解, 可以认为是很多个if-then规则的集合, 主要有点是模型具有可读性, 分类速度快. 决策树的学习通常包含三个步骤: 特征选择, 决策树的生成和决策树的剪枝.
5.1 决策树模型与学习
5.1.1 决策树模型
定义5.1(决策树)
分类决策树模型是一种描述对实例进行分类的树形结构. 决策树由节点node和有向边directed edge组成. 节点有两种类型: 内部节点internal node和叶节点leaf node. 内部节点表示一个特征或属性, 叶节点单表示一个类.
https://www.bilibili.com/video/BV1RC4y1p7wX?p=3
5.1.2 决策树与if-then规则
https://www.bilibili.com/video/BV1RC4y1p7wX?p=4
5.1.3 决策树与条件概率分布
https://www.bilibili.com/video/BV1RC4y1p7wX?p=5
5.1.4 决策树学习
决策树学习的损失函数通常是正则化的极大似然函数. 决策树学习的策略是以损失函数为目标函数的最小化
https://www.bilibili.com/video/BV1RC4y1p7wX?p=6
决策树生成对应于模型的局部选择,决策树剪枝对应于模型的全局选择。
决策树的生成只考虑局部最优, 相对的, 决策树的剪枝则考虑全局最优
决策树学习常用的算法有ID3, C4.5和CART
5.2 特征选择
5.2.1 特征选择问题
https://www.bilibili.com/video/BV1RC4y1p7wX?p=7
5.2.2 信息增益
https://www.bilibili.com/video/BV1RC4y1p7wX?p=8
https://www.bilibili.com/video/BV1RC4y1p7wX?p=9
为了便于说明, 先给出熵与条件熵的定义
在信息论与概率统计中, 熵entropy是表示随机变量不确定性的度量. 设X是一个取有限个值的离散随机变量, 其概率分布为:
P
(
X
=
x
i
)
=
p
i
,
i
=
1
,
2
,
.
.
.
,
n
P(X = x_i) = p_i, i=1,2,...,n
P(X=xi)=pi,i=1,2,...,n
则随机变量X的熵定义为
H
(
X
)
=
−
∑
i
=
1
n
p
i
l
o
g
p
i
H(X) = -\sum^n_{i=1}p_i log p_i
H(X)=−i=1∑npilogpi
若
p
i
=
0
p_i=0
pi=0则定义
0
l
o
g
0
=
0
0log0=0
0log0=0. 通常, 对数以2为敌或以e为底, 这时熵的单位分别称作为比特bit或纳特nat. 由定义可知, 熵只依赖于X的分布, 而与X的取值无关, 所以也可将X的熵记作
H
(
p
)
H(p)
H(p), 即
H
(
p
)
=
−
∑
i
=
1
n
p
i
l
o
g
p
i
H(p) = -\sum^n_{i=1}p_i log p_i
H(p)=−i=1∑npilogpi
熵越大, 随机变量的不确定性越大. 从定义可验证
0
≤
H
(
p
)
≤
l
o
g
n
0\leq H(p) \leq log n
0≤H(p)≤logn
当随机变量只取两个值, 列如1, 0时, 即X的分布为
P
(
X
=
1
)
=
p
,
P
(
X
=
0
)
=
1
−
p
,
0
≤
p
≤
1
P(X=1)=p, P(X=0)=1-p, 0 \leq p \leq 1
P(X=1)=p,P(X=0)=1−p,0≤p≤1
熵为
H
(
p
)
=
−
p
l
o
g
2
p
−
(
1
−
p
)
l
o
g
2
(
1
−
p
)
H(p) = -plog_2p-(1-p)log_2(1-p)
H(p)=−plog2p−(1−p)log2(1−p)
当p=0或p=1时,
H
(
p
)
=
0
H(p)=0
H(p)=0, 随机变量完全没有不确定性, 当p=0.5时,
H
(
p
)
=
1
H(p)=1
H(p)=1, 熵取值最大, 随机变量不确定性最大.
设随机变量(X, Y), 其联合概率分布为
P
(
X
=
x
i
,
Y
=
y
i
)
=
p
i
j
,
i
=
1
,
2
,
.
.
.
,
n
;
j
=
1
,
2
,
.
.
.
,
m
P(X= x_i, Y= y_i)=p_{ij}, i=1,2,...,n; j=1,2,...,m
P(X=xi,Y=yi)=pij,i=1,2,...,n;j=1,2,...,m
条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X)表示在已知随机变量X的条件下随机变量Y的不确定性. 随机变量X给定的条件下随机变量Y的条件熵conditional entropy H(Y|X), 定义为X给定条件下Y的条件概率分布的熵对X的数学期望
H
(
Y
∣
X
)
=
∑
i
=
1
n
p
i
H
(
Y
∣
X
=
x
i
)
H(Y|X) = \sum^n_{i=1}p_iH(Y|X=x_i)
H(Y∣X)=i=1∑npiH(Y∣X=xi)
这里,
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
当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时, 所对应的熵与条件熵分别称为经验熵empirical entropy 和经验条件熵empirical conditional entropy. 此时, 如有有0概率, 令0log0=0.
熵和信息熵的定义, 可参考王木头视频
https://www.bilibili.com/video/BV15V411W7VB
信息增益information gain表示得知特征X的信息而使得类Y的信息的不确定性减少的程度.
定义5.2(信息增益)
特征A对训练数据集D的信息增益
g
(
D
,
A
)
g(D, A)
g(D,A), 定义为集合D的经验熵
H
(
D
)
H(D)
H(D)与特征A给定条件下D的经验条件熵
H
(
D
∣
A
)
H(D|A)
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)
H(Y)与条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X)之差称为互信息mutual information. 决策树学习中的信息增益等价于训练数据集中类与特征的互信息.
决策树学习应用信息增益准则选择特征. 给定训练数据集D和特征A, 经验熵
H
(
D
)
H(D)
H(D)表示对数据集D进行分类的不确定性. 而经验条件熵
H
(
D
∣
A
)
H(D|A)
H(D∣A)表示在特征A给定的条件下对数据集D进行分类的不确定性. 那么他们的差, 即信息增益, 就表示由于特征A而使得数据集D的分类的不确定性减少的程度. 显然, 对于数据集D而言, 信息增益依赖于特征, 不同的特征往往具有不同的信息增益. 信息增益大的特征具有更强的分类能力.
根据信息增益准则的特征选择方法是: 对悬链数据集(或子集)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 \limits^K_{k=1}|C_k| = |D|
Ck,k=1,2,...,K,∣Ck∣为属于类Ck的样本个数,k=1∑K∣Ck∣=∣D∣. 设特征A有n个不同的取值
{
a
1
,
a
2
,
.
.
.
,
a
n
}
\{a_1, a_2,...,a_n\}
{a1,a2,...,an}, 根据特征A的取值将D划分为n个子集
D
1
,
D
2
,
.
.
.
,
D
n
,
∣
D
i
∣
为
D
i
的样本个数
,
∑
i
=
1
n
∣
D
i
∣
=
∣
D
∣
D_1, D_2, ...,D_n, |D_i|为D_i的样本个数, \sum \limits^n_{i=1}|D_i| = |D|
D1,D2,...,Dn,∣Di∣为Di的样本个数,i=1∑n∣Di∣=∣D∣. 记子集
D
i
D_i
Di中属于类
C
k
C_k
Ck的样本的集合为
D
i
k
D_{ik}
Dik, 即
D
i
j
=
D
i
∩
C
k
D{ij} = D_i \cap C_k
Dij=Di∩Ck
算法5.1 (信息增益算法)
输入: 训练数据集D和特征A
输出: 特征A对训练数据集D的信息增益
g
(
D
,
A
)
g(D, A)
g(D,A)
(!) 计算数据集D的经验熵
H
(
D
)
H(D)
H(D)
H
(
D
)
=
−
∑
k
=
1
K
∣
C
k
∣
D
l
o
g
2
∣
C
k
∣
∣
D
∣
H(D) = -\sum^K_{k=1}\frac{|C_k|}{D}log_2\frac{|C_k|}{|D|}
H(D)=−k=1∑KD∣Ck∣log2∣D∣∣Ck∣
(2) 计算特征A对数据集D的经验条件熵
H
(
D
∣
A
)
H(D|A)
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^n_{i=1}\frac{|D_i|}{|D|}H(D_i) = -\sum^n_{i=1}\frac{|D_i|}{|D|}\sum^K_{k=1}\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)
5.3.3 信息增益比
以信息增益作为划分训练数据集的特征, 存在偏向于选择取值较多的特征的问题. 使用信息增益比information gain ratio 可以对这一问题进行校正
定义5.3 (信息增益比)
特征A对训练数据集D的信息增益比
g
R
(
D
,
A
)
g_R(D, A)
gR(D,A)定义为其信息增益
g
(
D
,
A
)
g(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
∣
,
n
是特征
A
取值的个数
H_A(D) = -\sum\limits^n_{i=1}\frac{|D_i|}{|D|}log_2\frac{|D_i|}{|D|}, n是特征A取值的个数
HA(D)=−i=1∑n∣D∣∣Di∣log2∣D∣∣Di∣,n是特征A取值的个数
https://www.bilibili.com/video/BV1RC4y1p7wX?p=11
5.3 决策树的生成
5.3.1 ID3算法
ID3算法的核心是在决策树各个节点上应用信息增益准则选择特征, 递归地构建决策树. 具体方法是: 从根节点root node开始, 对结点计算所有可能的特征的信息增益, 选择信息增益最大的特征作为结点的特征, 由该特征的不同取值建立子节点; 再对子节点递归的调用以上方法, 构建决策树; 知道所有特征的信息增益均很小或没有特征可以选择为止. 最后得到一颗决策树. ID3相当于用极大似然法进行概率模型的选择.
算法5.2 (ID3算法)
输入: 训练数据集D, 特征集A阈值
ϵ
\epsilon
ϵ;
输出: 决策树T.
(1) 若D中所有实例属于同一类
C
k
C_k
Ck, 则T为单结点树, 并将类
C
k
C_k
Ck作为该结点的类标记, 返回T
(2) 若
A
=
ϕ
A = \phi
A=ϕ, 则T为单结点树, 并将D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记, 返回T
(3) 否则, 按算法5.1计算A中各特征对D的信息增益, 选择信息增益最大的特征
A
g
A_g
Ag
(4) 如果
A
g
A_g
Ag的信息增益小于阈值
ϵ
\epsilon
ϵ, 则置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, 返回
T
i
T_i
Ti
ID3算法只有树的生成, 所以该算法生成树容易产生过拟合.
https://www.bilibili.com/video/BV1RC4y1p7wX?p=12
5.3.2 C4.5的生成算法
C4.5在生成的过程中, 用信息增益比来选择特征
算法5.3 (C4.5的生成算法)
输入: 训练数据集D, 特征集A阈值
ϵ
\epsilon
ϵ;
输出: 决策树T.
(1) 若D中所有实例属于同一类
C
k
C_k
Ck, 则T为单结点树, 并将类
C
k
C_k
Ck作为该结点的类标记, 返回T
(2) 若
A
=
ϕ
A = \phi
A=ϕ, 则T为单结点树, 并将D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记, 返回T
(3) 否则, 按算法5.10计算A中各特征对D的信息增益比, 选择信息增益比最大的特征
A
g
A_g
Ag
(4) 如果
A
g
A_g
Ag的信息增益比小于阈值
ϵ
\epsilon
ϵ, 则置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, 返回
T
i
T_i
Ti
https://www.bilibili.com/video/BV1RC4y1p7wX?p=13
5.4 决策树的剪枝
https://www.bilibili.com/video/BV1RC4y1p7wX?p=14
决策树的剪枝往往通过最小化决策树整体的损失函数loss function或代价函数cost function来实现. 设树T的叶结点个数为
∣
T
∣
,
t
是树
T
的叶结点
,
该叶结点有
N
t
个样本点
,
其中
k
类的样本点有
N
t
k
个
,
k
=
1
,
2
,
.
.
.
,
K
,
H
t
(
T
)
为叶结点
t
上的经验熵
,
α
≥
0
为参数
,
则决策树学习的损失函数可以定义为
|T|, t是树T的叶结点, 该叶结点有N_t个样本点, 其中k类的样本点有N_{tk}个, k=1,2,...,K, H_t(T)为叶结点t上的经验熵, \alpha \geq 0 为参数, 则决策树学习的损失函数可以定义为
∣T∣,t是树T的叶结点,该叶结点有Nt个样本点,其中k类的样本点有Ntk个,k=1,2,...,K,Ht(T)为叶结点t上的经验熵,α≥0为参数,则决策树学习的损失函数可以定义为
C
α
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
+
α
∣
T
∣
C_\alpha(T) = \sum^{|T|}_{t=1}N_tH_t(T) + \alpha|T|
Cα(T)=t=1∑∣T∣NtHt(T)+α∣T∣
SUM(每个叶子结点 * 叶子结点有多少个样本)
其中经验熵为
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
在损失函数中, 将式右端的第一项记作
C
(
T
)
=
∑
t
=
1
∣
T
∣
N
t
H
t
(
T
)
=
−
∑
t
=
1
∣
T
∣
∑
k
=
1
K
N
t
k
l
o
g
N
t
k
N
t
C(T) = \sum^{|T|}_{t=1}N_tH_t(T) = -\sum^{|T|}_{t=1}\sum^K_{k=1}N_{tk}log\frac{N_{tk}}{N_t}
C(T)=t=1∑∣T∣NtHt(T)=−t=1∑∣T∣k=1∑KNtklogNtNtk
这时有
C
α
(
T
)
=
C
(
T
)
+
α
∣
T
∣
C_\alpha(T) = C(T) + \alpha|T|
Cα(T)=C(T)+α∣T∣
C
(
T
)
C(T)
C(T)表示模型对训练数据的预测误差, 即模型与训练数据的拟合程度,
∣
T
∣
|T|
∣T∣表示模型复杂度, 参数
α
≥
0
\alpha \geq 0
α≥0控制两者间的影响. 较大的
α
\alpha
α促使选择较简单的模型(树), 较小的
α
\alpha
α促使选择较复杂的模型(树).
α
=
0
\alpha=0
α=0意味着只考虑模型与训练数据的拟合程度, 不考虑模型的复杂度.
可以看出, 决策树生成只考虑了通过提高信息增益(或信息增益比)对训练数据进行更好的拟合. 而决策树剪枝通过优化损失函数还考虑了减小模型复杂度. 决策树生成学习局部的模型, 而决策树剪枝学习整体的模型.
以上损失函数的最小化等价于正则化的极大似然估计. 所以, 利用损失函数最小原则进行剪枝就是用正则化的加大似然估计进行模型选择.
算法5.4 (树的剪枝算法)
输入: 生成算法产生的整个树T, 参数
α
\alpha
α
输出: 修剪后的子树
T
α
T_\alpha
Tα
(1) 计算每个结点的经验熵
(2) 递归的从树的叶结点向上回缩
设一组叶结点回缩到其父结点之前与之后的整体树分别为
T
B
T_B
TB与
T
A
T_A
TA, 其对应的损失函数值分别是
C
α
(
T
B
)
与
C
α
(
T
A
)
C_\alpha(T_B)与C_\alpha(T_A)
Cα(TB)与Cα(TA), 如果
C
α
(
T
A
)
≤
C
α
(
T
B
)
C_\alpha(T_A) \leq C_\alpha(T_B)
Cα(TA)≤Cα(TB)
则进行剪枝, 即将父结点变为新的叶结点
(3) 返回(2), 直至不能继续为止, 得到损失函数最小的子树
T
α
T_\alpha
Tα
注意, 只需要考虑两个树的损失函数的差, 其计算可以在局部进行, 所以, 决策树的剪枝算法可以由一种动态规划的算法实现, 类似的动态规划算法可参考以下链接
动态规划
https://www.bilibili.com/video/BV1AB4y1w7eT
https://www.bilibili.com/video/BV1ET4y1U7T6
5.5 CART算法
classification and regression tree
https://www.bilibili.com/video/BV1RC4y1p7wX?p=15
CART是在给定输入随机变量X条件下输出随机变量Y的条件概率分布的学习方法. CART假设决策树是二叉树, 内部结点特征的取值为是
和否
, 左分支是取值为是
的分支, 右分支是取值为否
的分支. 这样的决策树等价于递归的二分每个特征, 将输入空间即特征空间划分为有限个单元, 并在这些单元上确定预测的概率分布, 也就是在输入给定的条件下输出的条件概率分布.
CART算法由以下两步组成:
(1)决策树生成:基于训练数据集生成决策树,生成的决策树要尽量大;
(2)决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树,这时用损失函数最小作为剪枝的标准。
5.5.1 CART生成
https://www.bilibili.com/video/BV1RC4y1p7wX?p=16
https://www.bilibili.com/video/BV1RC4y1p7wX?p=17
决策树的生成就是递归的构建二叉决策树的过程. 对回归树用平方误差最小化准则, 对分类树用基尼指数Gini index最小化准则, 进行特征选择, 生成二叉树.
- 回归树的生成
略
算法5.5 (最小二乘回归树生成算法)
略
- 分类树的生成
分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点
定义5.4 (基尼系数)
分类问题中, 假设有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_{k=1}p_k(1-p_k) = 1-\sum^K_{k=1}p_k^2
Gini(p)=k=1∑Kpk(1−pk)=1−k=1∑Kpk2
对于二分类风问题, 若样本点属于第1个类的概率是p, 则概率分布基尼指数为
G
i
n
i
(
p
)
=
2
p
(
1
−
p
)
Gini(p) = 2p(1-p)
Gini(p)=2p(1−p)
对于给定的样本集合D, 其基尼指数为
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
K
(
∣
C
k
∣
∣
D
∣
)
2
Gini(D) = 1-\sum^K_{k=1}(\frac{|C_k|}{|D|})^2
Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
这里,
C
k
是
D
种属于第
k
类的样本子集
,
K
是类的个数
C_k是D种属于第k类的样本子集, K是类的个数
Ck是D种属于第k类的样本子集,K是类的个数
如果样本集合
D
根据特征
A
是否取某一可能值
a
被分割为
D
1
和
D
2
两部分
,
即
如果样本集合D根据特征A是否取某一可能值a被分割为D_1和D_2两部分, 即
如果样本集合D根据特征A是否取某一可能值a被分割为D1和D2两部分,即
D
1
=
{
(
x
,
y
)
∈
D
∣
A
(
x
)
=
a
}
,
D
2
=
D
−
D
1
D_1 = \{(x,y)\in D|A(x) = a\}, D_2 = D - D_1
D1={(x,y)∈D∣A(x)=a},D2=D−D1
则在特征A的条件下, 集合D的基尼指数定义为
G
i
n
i
(
D
,
A
)
=
∣
D
1
∣
∣
D
∣
G
i
n
i
(
D
1
)
+
∣
D
2
∣
∣
D
∣
G
i
n
i
(
D
2
)
Gini(D, A) = \frac{|D_1|}{|D|}Gini(D_1) + \frac{|D_2|}{|D|}Gini(D_2)
Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2)
基尼指数Gini(D)表示D的不确定性, 基尼指数Gini(D, A)表示经A=a分割后集合D的不确定性. 基尼指数值越大, 样本集合的不确定性也就越大, 这一点与熵相似.
Gini系数越大, 样本不确定性越大, 这点与熵相似
算法5.6 (CART生成算法)
https://www.bilibili.com/video/BV1RC4y1p7wX?p=18
https://www.bilibili.com/video/BV1RC4y1p7wX?p=19
输入: 训练数据集D, 停止计算的条件
输出: CART决策树
根据训练数据集, 从根节点开始, 递归的对每个结点进行以下操作, 构建二叉决策树
(1)
设结点的训练数据集为
D
,
计算现有特征对该数据集的基尼指数
.
此时
,
对每一个特征
A
,
对其可能取的每个值
a
,
根据样本点对
A
=
a
的测试为
"
是
"
或
"
否
"
将
D
分给成
D
1
和
D
2
两部分
,
计算
A
=
a
时的基尼指数
设结点的训练数据集为D, 计算现有特征对该数据集的基尼指数. 此时, 对每一个特征A, 对其可能取的每个值a, 根据样本点对A=a的测试为"是"或"否"将D分给成D_1和D_2两部分, 计算A=a时的基尼指数
设结点的训练数据集为D,计算现有特征对该数据集的基尼指数.此时,对每一个特征A,对其可能取的每个值a,根据样本点对A=a的测试为"是"或"否"将D分给成D1和D2两部分,计算A=a时的基尼指数
(2)
在所有可能的特征
A
以及他们所有可能的切分点
a
中
,
选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点
.
依最优特征与最优切分点
,
从现结点生成两个子结点
,
将训练数据集依特征分配到两个子结点中去
在所有可能的特征A以及他们所有可能的切分点a中, 选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点. 依最优特征与最优切分点, 从现结点生成两个子结点, 将训练数据集依特征分配到两个子结点中去
在所有可能的特征A以及他们所有可能的切分点a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点.依最优特征与最优切分点,从现结点生成两个子结点,将训练数据集依特征分配到两个子结点中去
(3) 对两个子结点递归地调用(1), (2), 直至满足停止条件
(4) 生成CART决策树
算法停止计算的条件是结点中的样本个数小于预定阈值, 或样本集的基尼指数小于预定阈值(样本基本属于同一类), 或者没有更多特征
5.5.2 CART剪枝
https://zhuanlan.zhihu.com/p/76709712
CART剪枝算法从"完全生长"的决策树的底端减去一些子树, 使决策树变小(模型变简单), 从而能够对位置数据由更准确的预测. CART剪枝算法由两步组成: 首先从生成算法产生的决策树 T 0 T_0 T0底端开始不断剪枝, 知道 T 0 T_0 T0的根结点, 形成一个子树序列 { T 0 , T 1 , . . . , T n } \{T_0, T_1, ..., T_n\} {T0,T1,...,Tn}; 然后通过交叉验证法在独立的验证数据集上对子树序列进行测试, 从中选择最优子树.
- 剪枝, 形成一个子树序列
在剪枝过程中, 计算子树的损失函数:
C α ( T ) = C ( T ) + α ∣ T ∣ C_\alpha(T) = C(T) + \alpha|T| Cα(T)=C(T)+α∣T∣
其中, T为任意子树, C ( T ) C(T) C(T)为对训练数据集的预测误差(如基尼系数), ∣ T ∣ |T| ∣T∣为子树的叶结点个数, $\alpha \geq 0 $为参数, C α ( T ) C_\alpha(T) Cα(T)为参数是 α \alpha α时的子树T的整体损失. 参数 α \alpha α权衡训练数据的拟合程度与模型的复杂度.
对固定的 α \alpha α, 一定存在使损失函数 C α ( T ) C_\alpha(T) Cα(T)最小的子树, 将其表示为 T α T_\alpha Tα. T α T_\alpha Tα在损失函数 C α ( T ) C_\alpha(T) Cα(T)最小的意义下市最优的. 容易验证这样的最优子树是唯一的. 当 α \alpha α大的时候, 最优子树 T α T_\alpha Tα偏小; 当 α \alpha α小的时候, 最优子树 T α T_\alpha Tα偏大. 极端情况, 当 α = 0 \alpha=0 α=0时, 整体树是最优的. 当 α → ∞ \alpha \rightarrow \infty α→∞时, 根结点组成的单结点树是最优的.
证明略… - 在剪枝得到的子树序列 T 0 , T 1 , T 2 , . . . T n T_0, T_1, T_2,...T_n T0,T1,T2,...Tn中通过交叉验证选取最优子树 T α T_\alpha Tα
算法5.7 (CART剪枝算法)
输入: CART算法生成的决策
T
0
T_0
T0
输出: 最优决策树
T
α
T_\alpha
Tα
(1) 设
k
=
0
,
T
=
T
0
k=0, T=T_0
k=0,T=T0
(2) 设
α
=
+
∞
\alpha = +\infty
α=+∞
(3) 自下而上地对各内部结点
t
t
t计算
C
(
T
t
)
,
∣
T
t
∣
C(T_t), |T_t|
C(Tt),∣Tt∣以及
g
(
t
)
=
C
(
t
)
−
C
(
T
t
)
∣
T
t
∣
−
1
α
=
m
i
n
(
α
,
g
(
t
)
)
g(t) = \frac{C(t) - C(T_t)}{|T_t| - 1} \\ \alpha= min(\alpha,g(t))
g(t)=∣Tt∣−1C(t)−C(Tt)α=min(α,g(t))
这里,
T
t
T_t
Tt表示以t为根结点的子树,
C
(
T
t
)
C(T_t)
C(Tt)是对训练数据的预测误差,
∣
T
t
∣
|T_t|
∣Tt∣是
∣
T
t
∣
|T_t|
∣Tt∣的叶结点个数.
(4)
g
(
t
)
=
α
g(t) = \alpha
g(t)=α的内部结点t进行剪枝, 并对叶结点t以多数表决法决定其类, 得到树T
(5) 设
k
=
k
+
1
,
α
k
=
α
,
T
k
=
T
k = k+1, \alpha_k=\alpha, T_k=T
k=k+1,αk=α,Tk=T
(6) 如果
T
k
T_k
Tk不是由根结点及两个叶结点构成的树, 则回到步骤(2); 否则令
T
k
=
T
n
T_k=T_n
Tk=Tn
(7) 采用交叉验证法在子树序列
T
0
,
T
1
,
.
.
.
T
n
T_0, T_1, ... T_n
T0,T1,...Tn中选取最优子树
T
α
T_\alpha
Tα
本章概要
- 分类决策树模型是表示基于特征对实例进行分类的树形结构. 决策树可以转换成一个if-then规则的集和, 也可以看做是定义在特征空间划分上的类的条件概率分布.
- 决策树学习旨在构建一个与训练数据拟合很好, 并且复杂度小的决策树. 因为从可能的决策树中直接选取最优决策树是NP完全问题. 现实中采用启发式方法学习次优的决策树.
决策树学习算法包括3部分: 特征选择, 树的生成和树的剪枝. 常用的算法有ID3, C4.5, CART. - 特征选择的目的在于选取对训练数据能够分类的特征. 特征选择的关键是其准则. 常用的准则如下:
(1) 样本集合D对特征A的信息增益(ID3)
g ( D , A ) = H ( D ) − H ( D ∣ A ) H ( D ) = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g 2 ∣ C k ∣ ∣ D ∣ H ( D ∣ A ) = ∑ i = 1 n ∣ D i ∣ ∣ D ∣ H ( D i ) g(D,A)=H(D)-H(D|A) \\ H(D)=-\sum^K_{k=1}\frac{|C_k|}{|D|}log_2\frac{|C_k|}{|D|} \\ H(D|A)=\sum^n_{i=1}\frac{|D_i|}{|D|}H(D_i) g(D,A)=H(D)−H(D∣A)H(D)=−k=1∑K∣D∣∣Ck∣log2∣D∣∣Ck∣H(D∣A)=i=1∑n∣D∣∣Di∣H(Di)
其中, H ( D ) H(D) H(D)是数据D的熵, H ( D i ) H(D_i) H(Di)是数据集 D i D_i Di的熵, H ( D ∣ A ) H(D|A) H(D∣A)是数据集D对特征A的条件熵. D i D_i Di是D中特征A取第i个值的样本子集, C k C_k Ck是D中属于第k类的样本子集, n是特征A取值的个数, K是类的个数
(2) 样本集合D对特征A的信息增益比(C4.5)
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)
其中, g ( D ∣ A ) g(D|A) g(D∣A)是信息增益, H A ( D ) H_A(D) HA(D)是D关于特征A的值的熵
(3) 样本集合D的基尼指数(CART)
G i n i ( D ) = 1 − ∑ k = 1 K ( ∣ C k ∣ ∣ D ∣ ) 2 Gini(D)=1-\sum\limits^K_{k=1}(\frac{|C_k|}{|D|})^2 Gini(D)=1−k=1∑K(∣D∣∣Ck∣)2
特征A条件下集合D的基尼指数:(二分类)
G i n i ( D , A ) = ∣ D 1 ∣ ∣ D ∣ G i n i ( D 1 ) + ∣ D 2 ∣ ∣ D ∣ G i n i ( D 2 ) Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2) Gini(D,A)=∣D∣∣D1∣Gini(D1)+∣D∣∣D2∣Gini(D2) - 决策树的生成. 通常使用信息增益最大, 信息增益比最大或基尼指数最小作为特征选择的标准. 决策树的生成往往通过计算信息增益或其他指标, 从根节点开始, 递归的产生决策树. 这相当于用信息增益或其他准则不断的选取局部最优的特征, 或将训练集分割为能够基本准确分类的子集.
- 决策树的剪枝. 由于生成的决策树存在过拟合问题, 需要对它进行剪枝, 以简化学到的决策树. 决策树的剪枝, 往往从已生成的树上减掉一些叶节点或叶节点以上的子树, 并将其父节点或根节点作为新的叶节点, 从而简化生成的决策树.