机器学习之决策树
一、决策树的定义
分类决策树模型是一种描述对实例进行分类的树形结构。 决策树由结点和有向边组成, 结点有两种类型:内部结点和叶节点,内 部节点表示一个特征或属性, 叶节点表示一个类。决策树(Decision Tree),又称为判定树,是一种以树结构(包括二叉树和多叉树)形式表达的预测分析模型。
二、决策树的结构
- 根节点(Root Node)
它表示整个样本集合,并且该节点可以进一步划分成两个或多个子集。 - 决策结点(Decision Node)
当一个子结点进一步被拆分成多个子节点时,这个子节点就叫做决策结点。 - 叶子结点(Leaf/Terminal Node)
无法再拆分的结点被称为叶子结点,被包含在该叶节点的数据属于该类别。
三、决策树的原理
3.1 算法步骤
步骤 1: 将所有的数据看成是一个节点(根节点),进入步骤2;
步骤 2: 根据划分准则(划分准则即决策算法),从所有属性中挑选一个对节点进行分割,进入步骤3;
步骤3 : 生成若干个子节点,对每一个子节点进行判断,如果满足停止分裂的条件,进入步骤4;否则,进入步骤2;
步骤4:设置该节点是叶子节点,其输出的结果为该节点数量占比最大的类别。
注:在决策树基本算法中,有三种情形会导致递归返回:
- 当前结点包含的样本全属于同一类别,无需划分;
- 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;
- 当前结点包含的样本集合为空,不能划分。
3.2 划分准则
一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的"纯度"越来越高。以下是判断西瓜好坏的数据集。
编号 | 色泽 | 根蒂 | 敲声 | 纹理 | 脐部 | 触感 | 好瓜 |
---|---|---|---|---|---|---|---|
1 | - | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 乌黑 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | - | 是 |
3 | 乌黑 | 蜷缩 | - | 清晰 | 凹陷 | 硬滑 | 是 |
4 | 青绿 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 是 |
5 | - | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
6 | 青绿 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 软粘 | 是 |
7 | 乌黑 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 软粘 | 是 |
8 | 乌黑 | 稍蜷 | 浊响 | - | 稍凹 | 硬滑 | 是 |
9 | 乌黑 | - | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
10 | 青绿 | 硬挺 | 清脆 | - | 平坦 | 软粘 | 否 |
11 | 浅白 | 硬挺 | 清脆 | 模糊 | 平坦 | - | 否 |
12 | 浅白 | 蜷缩 | - | 模糊 | 平坦 | 软粘 | 否 |
13 | - | 稍蜷 | 浊响 | 稍糊 | 平坦 | 硬滑 | 否 |
14 | 浅白 | 稍蜷 | 沉闷 | 稍糊 | 凹陷 | 硬滑 | 否 |
15 | 乌黑 | 稍蜷 | 浊响 | 清晰 | 凹陷 | 软粘 | 否 |
16 | 浅白 | 蜷缩 | 浊响 | 模糊 | 凹陷 | 硬滑 | 否 |
17 | 青绿 | - | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
3.2.1 信息增益
信息熵:用来度量一个属性的信息量。
假定S为训练集,S的目标属性C(即样本的标签) 具有m个可能的类标号值,
C
=
{
C
1
,
C
2
,
.
.
.
,
C
m
}
C=\{C_1,C_2,...,C_m\}
C={C1,C2,...,Cm},假定训练集S中,
C
i
C_i
Ci在所有样本中出现的频率为
p
i
p_i
pi (i=1,2,…,m),则训练集S所包含的信息熵定义为:
E
n
t
(
S
)
=
E
n
t
(
p
1
,
p
2
,
.
.
.
,
p
m
)
=
−
∑
i
=
1
m
p
i
log
2
p
i
Ent(S)=Ent(p_1,p_2,...,p_m)=-\sum_{i=1}^mp_i\log_2p_i
Ent(S)=Ent(p1,p2,...,pm)=−i=1∑mpilog2pi
熵越小表示样本对目标属性的分布越纯,反之熵越大表示样本对目标属性分布越混乱。
实例
令西瓜数据集为S,其中有17个样本,目标属性“好瓜”有2个值{
C
1
C_1
C1=“是”,
C
2
C_2
C2=“否”},17个样本的分布为:8个样本类标号为“是”,9个样本类标号取值为“否”。
C
1
C_1
C1=“是” 在所有样本S中出现的概率为
8
17
\frac8{17}
178,
C
2
C_2
C2=“否” 在所有样本S中出现的概率为
9
17
\frac9{17}
179,因此数据集S的熵为:
E
n
t
(
S
)
=
E
n
t
(
8
17
,
9
17
)
=
−
8
17
log
2
8
17
−
9
17
log
2
9
17
=
0.9975
Ent(S) = Ent(\frac8{17},\frac9{17})=-\frac8{17}\log_2\frac8{17}-\frac9{17}\log_2\frac9{17}=0.9975
Ent(S)=Ent(178,179)=−178log2178−179log2179=0.9975
信息增益: 信息增益是划分前样本数据集的不纯程度(熵)和划分后样本数据集的不纯程度(熵)的差值。
假设划分前样本数据集为S,并用属性A来划分样本集S,则按属性A划分的信息增益Gain(S,A)为样本集S的熵减去按属性A划分S后的样本子集的熵:
G
a
i
n
(
S
,
A
)
=
E
n
t
(
S
)
−
E
n
t
A
(
S
)
Gain(S,A)=Ent(S)-Ent_A(S)
Gain(S,A)=Ent(S)−EntA(S)
按属性A划分S后的样本子集的熵定义如下:假定属性A有k个不同的取值,从而将S划分为k个样本子集
{
S
1
,
S
2
,
.
.
.
,
S
k
}
\{S_1,S_2,...,S_k\}
{S1,S2,...,Sk},则按属性A划分S后的样本子集信息熵为:
E
n
t
A
(
S
)
=
∑
i
=
1
k
∣
S
i
∣
∣
S
∣
E
n
t
(
S
i
)
Ent_A(S)=\sum_{i=1}^k\frac{|S_i|}{|S|}Ent(S_i)
EntA(S)=i=1∑k∣S∣∣Si∣Ent(Si)
其中
∣
S
i
∣
|S_i|
∣Si∣(i=1,2,…,k)为样本子集
S
i
S_i
Si中包含的样本数,|S|为样本集S中包含的样本数。信息增益越大,说明属性A划分后的样本子集越纯,越有利于分类。
实例
以西瓜数据集为例,设该数据集为S,假定用属性“脐部”(暂不考虑数据缺失的问题)来划分S,求S对属性“脐部”的信息增益。
(1) 首先由前例计算得到数据集S的熵值为0.9975。
(2)属性“脐部”有3个可能的取值{“凹陷”,“稍凹”,“平坦”},他将S划分为3个子集
{
S
1
,
S
2
,
S
3
}
\{S_1,S_2,S_3\}
{S1,S2,S3}。
S
1
S_1
S1为“脐部”属性为“凹陷”的样本子集共有8个样本;
S
2
S_2
S2为“脐部”属性为“稍凹”的样本子集共有5个样本;
S
3
S_3
S3为“脐部”属性为“平坦”的样本子集共有4个样本。
对样本子集
S
1
S_1
S1,“好瓜”=“是”的样本有5个样本,“好瓜”=“否”的有3个样本,则:
E
n
t
(
S
1
)
=
−
5
8
log
2
5
8
−
3
8
log
2
3
8
=
0.9544
Ent(S_1)=-\frac58\log_2\frac58-\frac38\log_2\frac38=0.9544
Ent(S1)=−85log285−83log283=0.9544
对样本子集
S
2
S_2
S2,“好瓜”=“是”的样本有3个样本,“好瓜”=“否”的有2个样本,则:
E
n
t
(
S
1
)
=
−
3
5
log
2
3
5
−
2
5
log
2
2
5
=
0.9710
Ent(S_1)=-\frac35\log_2\frac35-\frac25\log_2\frac25=0.9710
Ent(S1)=−53log253−52log252=0.9710
对样本子集
S
3
S_3
S3,“好瓜”=“是”的样本有0个样本,“好瓜”=“否”的有4个样本,则:
E
n
t
(
S
1
)
=
−
0
4
log
2
0
4
−
4
4
log
2
4
4
=
0.000
Ent(S_1)=-\frac04\log_2\frac04-\frac44\log_2\frac44=0.000
Ent(S1)=−40log240−44log244=0.000
综上,利用属性“脐部”划分S后的熵为:
E
n
t
脐
部
(
S
)
=
∑
i
=
1
k
∣
S
i
∣
∣
S
∣
E
n
t
(
S
i
)
=
∣
S
1
∣
∣
S
∣
E
n
t
(
S
1
)
+
∣
S
2
∣
∣
S
∣
E
n
t
(
S
2
)
+
∣
S
3
∣
∣
S
∣
E
n
t
(
S
3
)
=
8
17
E
n
t
(
S
1
)
+
5
17
E
n
t
(
S
2
)
+
4
17
E
n
t
(
S
3
)
=
0.4706
∗
0.9544
+
0.2941
∗
0.9710
+
0.2353
∗
0
=
0.7347
Ent_{脐部}(S)=\sum_{i=1}^k\frac{|S_i|}{|S|}Ent(S_i)=\frac{|S_1|}{|S|}Ent(S_1)+\frac{|S_2|}{|S|}Ent(S_2)+\frac{|S_3|}{|S|}Ent(S_3) \\ =\frac{8}{17}Ent(S_1)+\frac{5}{17}Ent(S_2)+\frac{4}{17}Ent(S_3) \qquad \qquad \quad\\ \quad\quad=0.4706*0.9544+0.2941*0.9710+0.2353*0=0.7347
Ent脐部(S)=i=1∑k∣S∣∣Si∣Ent(Si)=∣S∣∣S1∣Ent(S1)+∣S∣∣S2∣Ent(S2)+∣S∣∣S3∣Ent(S3)=178Ent(S1)+175Ent(S2)+174Ent(S3)=0.4706∗0.9544+0.2941∗0.9710+0.2353∗0=0.7347
以属性“脐部”划分集合S后的信息增益为:
G
a
i
n
(
S
,
“
脐
部
”
)
=
0.9975
−
0.7347
=
0.2628
Gain(S,“脐部”)=0.9975-0.7347=0.2628
Gain(S,“脐部”)=0.9975−0.7347=0.2628
注:
- 约定p=0时,plogp=0;
- 当S只含一类时(纯度最高),此时Ent(S)=0(最小值)。
- 当S中所有类所占比例相同(纯度最低),此时Ent(S)= log 2 k \log_2k log2k(最大值)。
3.2.2 增益率
实际上,信息增益准则对可取值数目较多的属性有所偏好,可以试想,选择一个唯一对应一个样本的属性进行分类,每一类都是最纯的,对应的信息增益也是最大的,然而这样的划分无疑是不具备泛化能力的。基于此,著名的C4.5决策树算法不直接使用信息增益,而是使用“增益率”来选择最优划分属性:
G
r
a
i
n
_
r
a
t
i
o
(
S
,
A
)
=
G
r
a
i
n
(
S
,
A
)
I
V
(
A
)
Grain\_ratio(S,A)=\frac{Grain(S,A)}{IV(A)}
Grain_ratio(S,A)=IV(A)Grain(S,A)
I
V
(
A
)
=
−
∑
v
=
1
V
∣
S
v
∣
∣
S
∣
log
2
∣
S
v
∣
∣
S
∣
IV(A)=-\sum_{v=1}^V\frac{|S^v|}{|S|}\log_2\frac{|S^v|}{|S|}
IV(A)=−v=1∑V∣S∣∣Sv∣log2∣S∣∣Sv∣
其中,
I
V
(
A
)
IV(A)
IV(A)称为A的“固有值”,A的可能取值数目越多,
I
V
(
A
)
IV(A)
IV(A)的值通常越大。
实例
假设西瓜数据集S,以“脐部”属性A为例,由上例知道
G
a
i
n
(
S
,
A
)
=
0.2628
Gain(S,A)=0.2628
Gain(S,A)=0.2628
属性“脐部”有3个可能的取值{“凹陷”,“稍凹”,“平坦”},其中“凹陷”有8个样本,“稍凹”有5个样本,“平坦”有4个样本。则有:
I
V
(
A
)
=
−
8
17
log
2
8
17
−
5
17
log
2
5
17
−
4
17
log
2
4
17
=
1.5222
IV(A)=-\frac{8}{17}\log_2\frac{8}{17}-\frac{5}{17}\log_2\frac{5}{17}-\frac{4}{17}\log_2\frac{4}{17}=1.5222
IV(A)=−178log2178−175log2175−174log2174=1.5222
G
a
i
n
_
r
a
t
i
o
(
S
,
A
)
=
0.2628
1.5222
=
0.1726
Gain\_ratio(S,A)=\frac{0.2628}{1.5222}=0.1726
Gain_ratio(S,A)=1.52220.2628=0.1726
需注意的是,增益率准则对可取值数目较少的属性有所偏好,因此, C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。
3.2.3 基尼指数
CART决策树使用“基尼指数”来选择划分属性:
G
i
n
i
(
S
)
=
∑
k
=
1
∣
γ
∣
∑
k
′
≠
k
p
k
p
k
′
=
1
−
∑
k
=
1
∣
γ
∣
p
k
2
Gini(S)=\sum_{k=1}^{|\gamma|}\sum_{k'\neq k}p_kp_k\prime = 1-\sum_{k=1}^{|\gamma|}p_k^2
Gini(S)=k=1∑∣γ∣k′̸=k∑pkpk′=1−k=1∑∣γ∣pk2
显然,Gini反映了从数据集S中随机抽取两个样本,其类别标记不一样的概率,因此,Gini越小,则S的纯度越高。
属性A的基尼指数定义为:
G
i
n
i
_
i
n
d
e
x
(
S
,
A
)
=
∑
v
=
1
V
∣
S
v
∣
∣
S
∣
G
i
n
i
(
S
v
)
Gini\_index(S,A)=\sum_{v=1}^V\frac{|S^v|}{|S|}Gini(S^v)
Gini_index(S,A)=v=1∑V∣S∣∣Sv∣Gini(Sv)
选择使上式最小的属性A作为划分属性。
3.2.4 剪枝处理
剪枝是决策树学习算法对付"过拟合"的主要手段.
过拟合原因:
1)噪声导致的过拟合:拟合了被误标记的样例,导致误分类。
2)缺乏代表性样本导致的过拟合:缺乏代表性样本的少量训练集作出的决策会出现过拟合。
3)多重比较造成的过拟合:复杂模型。
基本策略有"预剪枝" 和"后剪枝";
预剪枝是指在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点;
后剪枝则是先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点。
判断决策树泛化性能是否提升:留出法,即预留一部分数据用作"验证集"以进行性能评估。
例如:在预剪枝中,对于每一个分裂节点,对比分裂前后决策树在验证集上的预测精度,从而决定是否分裂该节点。而在后剪枝中,考察非叶节点,对比剪枝前后决策树在验证集上的预测精度,从而决定是否对其剪枝。
两种方法对比:
1)预剪枝使得决策树的很多分支都没有"展开”,不仅降低过拟合风险,而且显著减少训练/测试时间开销;但,有些分支的当前划分虽不能提升泛化性能,但在其基础上进行的后续划分却有可能导致性能显著提高,即预剪枝基于"贪心"本质禁止这些分支展开,给预剪枝决策树带来了欠拟含的风险。
2)后剪枝决策树通常比预剪枝决策树保留了更多的分支。一般情形下,后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树,但后剪枝过程是在生成完全决策树之后进行的,并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多。
3.2.5 特殊值处理
1、连续值
以上都是基于离散属性进行讨论,而连续属性的可取值数目不再有限, 因此,不能直接根据连续属性的可取值来对结点进行划分。此时需要进行连续属性离散化,最简单的策略是采用二分法对连续属性进行处理(C4 . 5)。
给定样本集S和连续属性a,假设a在S上出现了n个不同的取值,升序排列后记为:
{
a
1
,
a
2
,
.
.
.
,
a
n
}
\{a^1,a^2,...,a^n\}
{a1,a2,...,an}基于划分点t可将S分为S-(不大于t)和S+(大于t)两个子集,而对于相邻的属性取值
a
i
和
a
i
+
1
{a^i}和{a^{i+1}}
ai和ai+1,t在
[
a
i
,
a
i
+
1
)
[a^i,a^{i+1})
[ai,ai+1)之间取任何值对分类结果(S-和S+)都是一样的,可直接取其中位点进行考虑,即
t
=
a
i
+
a
i
+
1
2
t=\frac{a^i+a^{i+1}}2
t=2ai+ai+1。故,对连续属性a,可考察包含n-1个元素的候选划分点t集合:
T
a
=
{
a
i
+
a
i
+
1
2
∣
1
≤
i
≤
n
−
1
}
T_a=\{\frac{a^i+a^{i+1}}2| \quad 1\leq i \leq n-1\}
Ta={2ai+ai+1∣1≤i≤n−1}
于是,我们就可像离散属性值一样来考察这些划分点,选取最优的划分点进行样本集合的划分,例如,使用信息增益:
G
a
i
n
(
S
,
a
)
=
max
t
∈
T
a
G
a
i
n
(
S
,
a
,
t
)
=
max
t
∈
T
a
E
n
t
(
S
)
−
∑
λ
∈
{
−
,
+
}
∣
S
t
λ
∣
∣
S
∣
E
n
t
(
S
t
λ
)
Gain(S,a)=\max \limits_{t \in T^a} Gain(S,a,t)=\max \limits_{t \in T^a}Ent(S)-\sum_{\lambda \in \{-,+\}}\frac{|S_t^{\lambda}|}{|S|}Ent(S_t^{\lambda})
Gain(S,a)=t∈TamaxGain(S,a,t)=t∈TamaxEnt(S)−λ∈{−,+}∑∣S∣∣Stλ∣Ent(Stλ)
即选择使信息增益最大的划分点进行划分。
注:
1)可将划分点设为该属性在训练集中出现的不大于中位点的最大值,从而使得最终决策树使用的划分点都在训练集中出现过。
2)与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。
2、缺失值
缺失问题:即样本的某些属性值缺失。
面临问题:
1)如何在属性值缺失的情况下进行划分属性的选择?(比如“色泽”这个属性有的样本在该属性上的值是缺失的,那么该如何计算“色泽”的信息增益?)
2)给定划分属性,若样本在该属性上的值是缺失的,那么该如何对这个样本进行划分?(即到底把这个样本划分到哪个结点里?)
解决方法:(C4.5)
给定训练集S和属性a,仅对S中在属性a上没有缺失值的样本子集
S
~
\tilde{S}
S~,来判断属性a的优劣。假定我们为每个样本x赋予一个权重w(x)(初始化为1),定义:
- ρ \rho ρ:表示无缺失值样本所占的比例。
- ρ ~ k \tilde{\rho}_k ρ~k:表示无缺失值样本中第K类所占的比例。
- r ~ k \tilde r_k r~k:表示无缺失值样本中在a上取值为 a v a^v av的样本所占的比例。
由以上定义,将信息增益推广为:
G
a
i
n
(
S
,
a
)
=
ρ
×
G
a
i
n
(
S
~
,
a
)
=
ρ
×
(
E
n
t
(
S
~
)
−
∑
v
=
1
V
r
~
v
E
n
t
(
S
~
v
)
)
Gain(S,a)=\rho \times Gain(\tilde{S},a) =\rho \times\left(Ent(\tilde{S})-\sum_{v=1}^V\tilde{r}_vEnt(\tilde{S}^v)\right)
Gain(S,a)=ρ×Gain(S~,a)=ρ×(Ent(S~)−v=1∑Vr~vEnt(S~v))
其中,
E
n
t
(
S
~
)
=
−
∑
k
=
1
∣
γ
∣
p
~
k
log
2
p
~
k
Ent(\tilde{S})=-\sum_{k=1}^{|\gamma|}\tilde{p}_k\log_2\tilde{p}_k
Ent(S~)=−k=1∑∣γ∣p~klog2p~k
对于问题2),若样本x在a上的取值缺失,则将x同时划入所有子节点,且样本权值对应于属性值
a
v
a^v
av调整为
r
~
v
⋅
w
(
x
)
\tilde{r}_v\cdot w(x)
r~v⋅w(x),即让同一个样本以不同概率划入不同的子节点中去。
以西瓜数据集为例:
编号 | 色泽 | 根蒂 | 敲声 | 纹理 | 脐部 | 触感 | 好瓜 |
---|---|---|---|---|---|---|---|
1 | - | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 乌黑 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | - | 是 |
3 | 乌黑 | 蜷缩 | - | 清晰 | 凹陷 | 硬滑 | 是 |
4 | 青绿 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 是 |
5 | - | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
6 | 青绿 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 软粘 | 是 |
7 | 乌黑 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 软粘 | 是 |
8 | 乌黑 | 稍蜷 | 浊响 | - | 稍凹 | 硬滑 | 是 |
9 | 乌黑 | - | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
10 | 青绿 | 硬挺 | 清脆 | - | 平坦 | 软粘 | 否 |
11 | 浅白 | 硬挺 | 清脆 | 模糊 | 平坦 | - | 否 |
12 | 浅白 | 蜷缩 | - | 模糊 | 平坦 | 软粘 | 否 |
13 | - | 稍蜷 | 浊响 | 稍糊 | 平坦 | 硬滑 | 否 |
14 | 浅白 | 稍蜷 | 沉闷 | 稍糊 | 凹陷 | 硬滑 | 否 |
15 | 乌黑 | 稍蜷 | 浊响 | 清晰 | 凹陷 | 软粘 | 否 |
16 | 浅白 | 蜷缩 | 浊响 | 模糊 | 凹陷 | 硬滑 | 否 |
17 | 青绿 | - | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
以属性“色泽”为例,根节点包含全部17个样例,各样本初始权重为1,该属性上无缺失的样例子集包含编号为{2 ,3 ,4, 6 , 7, 8, 9 , 10, 11 , 12 , 14, 15, 16, 17}的14个样例,其信息熵为:
E
n
t
(
S
~
)
=
−
∑
k
=
1
2
p
~
k
log
2
p
~
k
=
−
(
6
14
log
2
6
14
+
8
14
log
2
8
14
)
=
0.985
Ent(\tilde{S})=-\sum_{k=1}^2\tilde{p}_k\log_2\tilde{p}_k \\ \qquad\qquad\qquad\qquad\qquad\qquad \quad = -\left(\frac6{14}\log_2\frac6{14}+\frac8{14}\log_2\frac8{14}\right) =0.985
Ent(S~)=−k=1∑2p~klog2p~k=−(146log2146+148log2148)=0.985
对应的属性取值为“青绿”,“乌黑”,“浅白”的样本子集的信息熵分别为:
E
n
t
(
S
~
1
)
=
−
(
2
4
log
2
2
4
+
2
4
log
2
2
4
)
=
1.000
Ent(\tilde{S}^1)= -\left(\frac24\log_2\frac24+\frac24\log_2\frac24\right)=1.000
Ent(S~1)=−(42log242+42log242)=1.000
E
n
t
(
S
~
2
)
=
−
(
4
6
log
2
4
6
+
2
6
log
2
2
6
)
=
0.918
Ent(\tilde{S}^2)= -\left(\frac46\log_2\frac46+\frac26\log_2\frac26\right)=0.918
Ent(S~2)=−(64log264+62log262)=0.918
E
n
t
(
S
~
3
)
=
−
(
0
4
log
2
0
4
+
4
4
log
2
4
4
)
=
0.000
Ent(\tilde{S}^3)= -\left(\frac04\log_2\frac04+\frac44\log_2\frac44\right)=0.000
Ent(S~3)=−(40log240+44log244)=0.000
因此,非缺失样本子集的信息增益为:
G
a
i
n
(
S
~
,
色
泽
)
=
E
n
t
(
S
~
)
−
∑
v
=
1
3
r
~
v
E
n
t
(
S
~
v
)
=
0.985
−
(
4
14
×
1.000
+
6
14
×
0.918
+
4
14
×
0.000
)
=
0.306
Gain(\tilde{S},色泽)=Ent(\tilde{S})-\sum_{v=1}^3\tilde{r}_vEnt(\tilde{S}^v) \\ \qquad\qquad\qquad\qquad\qquad\qquad \quad=0.985-\left(\frac4{14}\times 1.000+\frac6{14}\times 0.918+\frac4{14}\times 0.000\right) =0.306
Gain(S~,色泽)=Ent(S~)−v=1∑3r~vEnt(S~v)=0.985−(144×1.000+146×0.918+144×0.000)=0.306
从而,计算得所有样本集的信息增益为:
G
a
i
n
(
S
,
色
泽
)
=
ρ
×
G
a
i
n
(
S
~
,
色
泽
)
=
14
17
×
0.036
=
0.252
Gain(S,色泽)=\rho \times Gain(\tilde{S},色泽)=\frac{14}{17} \times 0.036=0.252
Gain(S,色泽)=ρ×Gain(S~,色泽)=1714×0.036=0.252
类似地可计算出其他所有属性在S上的信息增益:
G
a
i
n
(
S
,
色
泽
)
=
0.252
G
a
i
n
(
S
,
根
蒂
)
=
0.171
G
a
i
n
(
S
,
敲
声
)
=
0.145
G
a
i
n
(
S
,
纹
理
)
=
0.424
G
a
i
n
(
S
,
脐
部
)
=
0.289
G
a
i
n
(
S
,
触
感
)
=
0.006
Gain(S,色泽)= 0.252 \qquad Gain(S,根蒂)= 0.171 \\ Gain(S,敲声)= 0.145 \qquad Gain(S,纹理)= 0.424\\Gain(S,脐部)= 0.289 \qquad Gain(S,触感)= 0.006
Gain(S,色泽)=0.252Gain(S,根蒂)=0.171Gain(S,敲声)=0.145Gain(S,纹理)=0.424Gain(S,脐部)=0.289Gain(S,触感)=0.006
选择信息增益最大对应的属性“纹理”进行划分,划分结果为:
“清晰”分支:编号为{1 ,2 ,3 ,4, 5 ,6 ,15}的样本
“稍糊”分支:编号为{7 ,9, 13, 14, 17}的样本
“模糊”分支:编号为{11 ,12, 16}的样本
缺失样本:{8},同时进入三个分支中,权重分别调整为7/15,5/15和3/15;编号{10}类似。
3.2.6 泛化误差估计
1、再代入估计
再代入估计方法假设训练数据集可以很好地代表整体数据,因此,可以使用训练误差(再代入误差)提供对泛化误差的乐观估计。此情形下,决策树算法将简单地选择产生最低训练误差的模型作为最终的模型,尽管,使用训练误差通常是泛化误差的一种很差的估计。
2、结合模型复杂度
根据奥卡姆剃刀原则:“给定两个具有相同泛化误差的模型,较简单的模型比较复杂的模型更可取”,复杂模型中的附加成分很大程度上是基于对偶然的拟合。
以下是把模型复杂度与模型评估结合在一起的方法:
悲观误差评估
使用训练误差与模型复杂度罚项的和来计算泛化误差,如:
设n(t)是结点t分类的训练记录数,e(t)是被误分类的记录数,则决策树T的悲观误差可表示为:
e
g
(
T
)
=
∑
i
=
1
k
[
e
(
t
i
)
+
Ω
(
t
i
)
]
∑
i
=
1
k
n
(
t
i
)
=
e
(
T
)
+
Ω
(
T
)
N
t
e_g(T)=\frac{\sum_{i=1}^k[e(t_i)+\Omega(t_i)]}{\sum_{i=1}^kn(t_i)}=\frac{e(T)+\Omega(T)}{N_t}
eg(T)=∑i=1kn(ti)∑i=1k[e(ti)+Ω(ti)]=Nte(T)+Ω(T)
其中,k是决策树的叶结点数,e(T)是决策树的总训练误差,
Ω
(
T
i
)
\Omega(T_i)
Ω(Ti)是每个叶结点对应的罚项。例:假设有如下决策树,已知其误分类率为6/24,每个结点的惩罚项设为0.5,则其悲观误差为:
注: 关于惩罚项的理解:对于二叉树来说,0.5的惩罚项意味着只要至少能够改善一个训练记录的分类,结点就应该分裂,因为分裂一个结点等价于总误差增加0.5,代价比犯一个训练错误小。而如果令惩罚项为1,说明除非能减少一个以上训练记录的误分类,否则结点不应当分裂。
3、使用验证集
此方法中,不使用训练集来估计泛化误差,而是把原始数据集分为训练集和验证集,验证集用于估计泛化误差。通常是通过对算法进行调参,直到算法产生的模型在验证集上达到最低的错误率。
四、决策树实战战
实现代码参考:决策树实战
五、参考
【1】CSDN-markdown语法之如何使用LaTeX语法编写数学公式
【2】文刀煮月-决策树
【3】决策树(decision tree)(四)——缺失值处理
【4】https://github.com/apachecn/AiLearning/tree/master/docs/ml
【5】《机器学习》作者:周志华