回顾
前面我们介绍了决策树的特征选择,以及根据信息增益构建决策树。
那么决策树的生成又有哪些经典算法呢?本篇将主要介绍ID3的生成算法,然后介绍C4.5中的生成算法。最后简单介绍CRAT算法。
ID3算法
前面我们提到,一般而言,信息增益越大,则意味着使用该属性来进行划分所获得的“纯度”提升就越大。因此,我们可以用信息增益来进行决策树的划分属性选择。著名的ID3决策树学习算法就是以信息增益为准则来划属性的。
ID3算法流程
输入:训练数据集
D
D
D,特征集
A
A
A,阀值
E
\mathcal{E}
E
输出:决策树
T
T
T
(1)若
D
D
D中所属实例属于同一类
C
k
C_k
Ck,则T为单结点树,并将类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T;
(2)若
A
=
ϕ
A = \phi
A=ϕ,则
T
T
T为单结点树,并将
D
D
D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T;
(3)否则,按照计算
A
A
A中每个特征对
D
D
D的信息增益,选择信息增益最大的特征
A
m
A_m
Am;
(4)如果
A
m
A_m
Am的信息增益小于阀值
E
\mathcal{E}
E,则置
T
T
T为单结点树,并将
D
D
D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T;
(5)否则,对
A
m
A_m
Am的每一种可能值
a
i
a_i
ai,依
A
m
=
a
i
A_m=a_i
Am=ai将
D
D
D分割为若干非空子集
D
i
D_i
Di,将
D
i
D_i
Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树
T
T
T,返回
T
T
T;
(6)对第
i
i
i个子结点,以
D
i
D_i
Di为训练集,以
A
−
A
m
A-A_m
A−Am为特征集,递归调用步骤(1)~(5),得到子树
T
i
T_i
Ti,返回
T
i
T_i
Ti;
ID3算法的优缺点
- 优点:
决策树构建速度快,容易构建
- 缺点:
计算依赖于特征数目较多的特征,而属性值最多的属性并不一定最优
ID3算法不是递增算法
ID3算法是单变量决策树,对特征属性之间的关系不会考虑
抗噪性差
只适合小规模数据集,需要将数据放到内存中
容易产生过拟合
C4.5算法
C4.5算法与ID3算法相似,C4.5算法对ID3算法进行了改进。C4.5在生成的过程中,用信息增益比来选特征。
信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题,使用信息增益比可以对这一问题进行校正。这是特征选择的另一准则。
定义:特征
A
A
A对训练数据集
D
D
D的信息增益比
g
R
(
D
,
A
)
g_R(D,A)
gR(D,A)定义为其信息增益
g
(
D
,
A
)
g(D,A)
g(D,A)与训练数据集
D
D
D关于特征
A
A
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
n
n是特征
A
A
A取值的个数。
C4.5算法流程
输入:训练数据集
D
D
D,特征集
A
A
A,阀值
E
\mathcal{E}
E
输出:决策树
T
T
T
(1)若
D
D
D中所属实例属于同一类
C
k
C_k
Ck,则T为单结点树,并将类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T;
(2)若
A
=
ϕ
A = \phi
A=ϕ,则
T
T
T为单结点树,并将
D
D
D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T;
(3)否则,按照计算
A
A
A中每个特征对
D
D
D的信息增益比,选择信息增益比最大的特征
A
m
A_m
Am;
(4)如果
A
m
A_m
Am的信息增益比小于阀值
E
\mathcal{E}
E,则置
T
T
T为单结点树,并将
D
D
D中实例数最大的类
C
k
C_k
Ck作为该结点的类标记,返回
T
T
T;
(5)否则,对
A
m
A_m
Am的每一种可能值
a
i
a_i
ai,依
A
m
=
a
i
A_m=a_i
Am=ai将
D
D
D分割为若干非空子集
D
i
D_i
Di,将
D
i
D_i
Di中实例数最大的类作为标记,构建子结点,由结点及其子结点构成树
T
T
T,返回
T
T
T;
(6)对第
i
i
i个子结点,以
D
i
D_i
Di为训练集,以
A
−
A
m
A-A_m
A−Am为特征集,递归调用步骤(1)~(5),得到子树
T
i
T_i
Ti,返回
T
i
T_i
Ti;
C4.5算法的优缺点
- 优点:
产生的规则易于理解
准确率较高
实现简单
- 缺点:
对数据需要进行多次扫描和排序,所以效率低
只适合小规模数据集,需要将数据放到内存中
CART算法
CART决策树使用“基尼指数”来选择特征划分,数据集
D
D
D的纯度可以用基尼值来度量:
G
i
n
i
(
D
)
=
∑
k
=
1
∣
y
∣
∑
k
′
≠
k
p
k
p
k
′
=
1
−
∑
k
=
1
∣
y
∣
p
k
2
Gini(D) = \sum_{k=1}^{|y|}\sum_{k^{'} \neq k}p_kp_{k^{'}} = 1 - \sum_{k=1}^{|y|}p_k^2
Gini(D)=k=1∑∣y∣k′̸=k∑pkpk′=1−k=1∑∣y∣pk2
直观来说,
G
i
n
i
(
D
)
Gini(D)
Gini(D)反映了从数据集
D
D
D中随机抽取两个样本,其类别标记不一致的概率。因此
G
i
n
i
(
D
)
Gini(D)
Gini(D)越小,则数据集
D
D
D的纯度越高。
如果样本集合
D
D
D根据特征
A
A
A是否取某一可能值
a
a
a被分割成
D
1
D_1
D1和
D
2
D_2
D2两部分,即:
KaTeX parse error: Can't use function '$' in math mode at position 31: …in D|A(x) = a\}$̲,$D_2 = D - D_1
则在特征
A
A
A的条件下,集合
D
D
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)
通式为:
G
i
n
i
(
D
,
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
G
i
n
i
(
D
v
)
Gini(D,a) = \sum_{v=1}^{V}\frac{|D_v|}{|D|}Gini(D_v)
Gini(D,a)=v=1∑V∣D∣∣Dv∣Gini(Dv)
基尼指数
G
i
n
i
(
D
)
Gini(D)
Gini(D)表示集合
D
D
D的不确定性,基尼指数
G
i
n
i
(
D
,
A
)
Gini(D,A)
Gini(D,A)表示经
A
=
a
A=a
A=a分割后集合
D
D
D的不确定性。
我们在候选属性集合
A
A
A中,选择那个是的划分后基尼指数最小的属性作为最优划分属性。
注:基尼指数用来划分属性生成分类数的,对于回归树的生成我们用的是最小二乘回归树生成算法。
最小二乘回归树生成算法
输入:训练数据集
D
D
D;
输出:回归树
f
(
x
)
f(x)
f(x)
在训练数据集所在的输入空间中,递归的将每个区域划分为两个子区域并决定每个子区域上的输出值,构建二叉决策树。
(1)选择最优切分变量
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}[\min_{c_1}\sum_{x_i \in R_1(j,s)}(y_i-c_1)^2+\min_{c_2}\sum_{x_i \in R_2(j,s)}(y_i-c_2)^2]
j,smin[c1minxi∈R1(j,s)∑(yi−c1)2+c2minxi∈R2(j,s)∑(yi−c2)2]
遍历变量
j
j
j,对固定的切分变量
j
j
j扫描切分点
s
s
s,选择使上式达到最小值 的对
(
j
,
s
)
(j,s)
(j,s)
(2)用选定的对
(
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)=\{x|x^{(j)}\leqslant s\},R_2(j,s)=\{x|x^{(j)} > s\}
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
c_m = \frac{1}{N_m}\sum_{x_i \in R_m(j,s)}y_i,x \in R_m,m = 1, 2
cm=Nm1xi∈Rm(j,s)∑yi,x∈Rm,m=1,2
(3)继续对两个子区域调用步骤(1)(2),直到满足停止条件
(4)将输入空间划分为
M
M
M个区域
R
1
,
R
2
,
.
.
.
,
R
M
R_1,R_2,...,R_M
R1,R2,...,RM,生成决策树:
f
(
x
)
=
∑
m
=
1
M
c
m
I
(
x
∈
R
m
)
f(x) = \sum_{m=1}^{M}c_mI(x \in R_m)
f(x)=m=1∑McmI(x∈Rm)
CART基于基尼指数的生成算法
输入:训练数据集
D
D
D,停止计算条件;
输出:CART决策树
根据训练数据集,从根结点开始,递归的将每个结点进行以下操作,构建二叉决策树。
(1)设结点的训练数据集为
D
D
D,计算现有特征对该数据集的基尼指数。此时,对每一个特征
A
A
A,对其可能取的每一个值
a
a
a,根据样本点对
A
=
a
A=a
A=a的测试为“是”或“否”将
D
D
D分割成
D
1
D_1
D1和
D
2
D_2
D2两部分,计算
A
=
a
A=a
A=a时的基尼指数。
(2)在所有可能的特征
A
A
A以及它们所有可能的切分点
a
a
a中,选择基尼指数最小的特征及其对应的切分点作为最优特征与最优切分点,生成两个子结点。
(3)对两个子结点递归调用(1),(2),直到满足停止条件;
(4)生成CART决策树。
总结
对于每种生成算法,只是使用了不同的方法来选择特征,流程基本类似。
ID3和C4.5算法均只适合小规模数据集上使用
ID3和C4.5算法都是单变量决策树
当属性取值比较多的时候,最好考虑C4.5算法,ID3算法得出的结果比较差
决策树分类一般只适合小数据量的情况
此外,我们还可以对决策树进行一些优化策略,比如:剪枝。决策树剪枝优化及可视化
参考资料:
李航《统计学习方法》
周志华《机器学习》西瓜书