本文为《机器学习》(周志华)、《统计学习方法》 的读书笔记
- 参考 南瓜书
基本流程
- 顾名思义,决策树是基于树结构来进行决策的; 叶结点对应于决策结果,其他每个结点则对应于一个属性测试; 每个结点包含的样本集合根据属性测试的结果被划分到子结点中; 根结点包含样本全集. 从根结点到每个叶结点的路径对应了一个判定测试序列
决策树中的所有路径都对应特征空间的一个划分,每个叶结点上的条件概率往往偏向于某一类,决策树分类时将该节点的实例强行分到条件概率大的那一类去
- 决策树学习的基本流程遵循"分而治之" (divide-and-conquer) 策略 (递归过程). 在决策树基本算法中,有三种情形会导致递归返回:
- (1) 当前结点包含的样本全属于同一类别,无需划分;
- (2) 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分; 此时我们把当前结点标记为叶结点,并将其类别设定为该结点所含样本最多的类别 (利用当前结点的后验分布 → \rightarrow → max c P ( c ∣ x ) \mathop{\max}\limits_cP(c|x) cmaxP(c∣x))
- (3) 当前结点包含的样本集合为空,不能划分. 这种情况下,我们同样把当前结点标记为叶结点,但将其类别设定为其父结点所含样本最多的类别 (把父结点的样本分布作为当前结点的先验分布)
选择最优划分属性实际上相当于一个启发式规则,得到的决策树是次最优的
划分选择
即选择最优划分属性
- 一般而言,随着划分过程不断进行,我们希望决策树的分支结点所包含的样本尽可能属于同一类别,即结点的"纯度" (purity) 越来越高.
信息增益 (information gain) (ID3)
信息熵 (information entropy)
- “信息熵” 是度量样本集合纯度最常用的一种指标. 假定当前样本集合
D
D
D 中第
k
k
k 类样本所占的比例为
p
k
p_k
pk (
k
=
1
,
2
,
.
.
.
,
∣
Y
∣
k = 1, 2,. . . , |\mathcal Y|
k=1,2,...,∣Y∣) ,则
D
D
D 的信息熵定义为
- 若令
∣
Y
∣
=
n
|\mathcal Y|= n
∣Y∣=n,
p
k
=
x
k
p_k = x_k
pk=xk,那么信息熵
E
n
t
(
D
)
Ent(D)
Ent(D) 就可以看作一个
n
n
n 元实值函数,也即
其中, 0 ≤ x k ≤ 1 0 ≤ x_k ≤ 1 0≤xk≤1, ∑ k = 1 n x k = 1 \sum^n_{k=1} x_k = 1 ∑k=1nxk=1。当 f ( x 1 , . . . , x n ) f(x_1, ..., x_n) f(x1,...,xn) 取到最大值 log 2 ∣ n ∣ \log_2|n| log2∣n∣ 时: x 1 = x 2 = . . . = x n = 1 n x_1 = x_2 = ... = x_n =\frac{1}{n} x1=x2=...=xn=n1,此时样本集合纯度最低 (信息熵最大);当 f ( x 1 , . . . , x n ) f(x_1, ..., x_n) f(x1,...,xn) 取到最小值 0 时: x k = 1 , x 1 = x 2 = . . . = x k − 1 = x k + 1 = . . . = x n = 0 x_k = 1, x_1 = x_2 = ... = x_{k−1} = x_{k+1} = ... = x_n = 0 xk=1,x1=x2=...=xk−1=xk+1=...=xn=0,此时样本集合纯度最高 (信息熵最小)
条件熵
- 条件熵表示的是在已知一个随机变量的条件下,另一个随机变量的不确定性
- 具体地,假设有随机变量
X
X
X 和
Y
Y
Y,那么在已知
X
X
X 的条件下,随机变量
Y
Y
Y 的条件熵为
其中, p i = P ( X = x i ) p_i = P(X = x_i) pi=P(X=xi)
- 具体地,假设有随机变量
X
X
X 和
Y
Y
Y,那么在已知
X
X
X 的条件下,随机变量
Y
Y
Y 的条件熵为
互信息
- 互信息定义为信息熵和条件熵的差,它表示的是已知一个随机变量的信息后使得另一个随机变量的不确定性减少的程度
- 具体地,假设有随机变量
X
X
X 和
Y
Y
Y,那么在已知
X
X
X 的信息后,
Y
Y
Y 的不确定性减少的程度为
- 具体地,假设有随机变量
X
X
X 和
Y
Y
Y,那么在已知
X
X
X 的信息后,
Y
Y
Y 的不确定性减少的程度为
信息增益 (information gain)
- 假定离散属性
a
a
a 有
V
V
V 个可能的取值
{
a
1
,
.
.
.
,
a
V
}
\{a_1,...,a^V\}
{a1,...,aV},若使用
a
a
a 来对样本集
D
D
D 进行划分,则会产生
V
V
V 个分支结点, 其中第
v
v
v 个分支结点包含了
D
D
D 中所有在属性
a
a
a 上取值为
a
V
a^V
aV 的样本, 记为
D
V
D^V
DV. 我们可根据式 (4.1) 计算出
D
V
D^V
DV 的信息熵, 再考虑到不同的分支结点所包含的样本数不同, 给分支结点赋予权重
∣
D
V
∣
/
∣
D
∣
|D^V|/|D|
∣DV∣/∣D∣,于是可计算出用属性
a
a
a 对样本集
D
D
D 进行划分所获得的"信息增益"
- 在信息论中信息增益也称为互信息。所以在这里,这个公式可以理解为在属性 a a a 的取值已知后数据集 D D D 中类别 k k k 的不确定性减小的程度。若根据某个属性计算得到的信息增益越大,则说明在知道其取值后样本集的不确定性减小的程度越大,也即为“纯度提升”越大
利用信息增益来进行决策树的划分属性选择
a ∗ = arg max a ∈ A Gain ( D , a ) a_{*}=\underset{a \in A}{\arg \max } \operatorname{Gain}(D, a) a∗=a∈AargmaxGain(D,a)
著名的 ID3 决策树学习算法就是以信息增益为准则来选择划分属性 (ID3 名字中的 ID 是 Iterative Dichotomiser (迭代二分器) 的简称)
例
- 以表 4.1 中的西瓜数据集 2.0 为例,该数据集包含 17 个训练样例,用以学习一棵能预测没剖开的是不是好瓜的决策树. 显然,
∣
Y
∣
=
2
|\mathcal Y| = 2
∣Y∣=2. 在决策树学习开始时,根结点包含
D
D
D 中的所有样例,其中正例占
p
1
=
8
17
p_1 =\frac{8}{17}
p1=178,反例占
9
17
\frac{9}{17}
179. 于是,根据式 (4.1) 可计算出根结点的信息熵为
- 然后,我们要计算出当前属性集合 {色泽,根蒂,敲声,纹理,脐部,触感} 中每个属性的信息增益. 以属性"色泽"为例,它有 3 个可能的取值: {青绿,乌黑,浅白}. 若使用该属性对
D
D
D 进行划分,则可得到 3 个子集,分别记为:
D
1
D^1
D1(色泽=青绿),
D
2
D^2
D2 (色泽=乌黑),
D
3
D^3
D3 (色泽=浅白).
- 子集
D
1
D^1
D1 包含编号为 {1, 4, 6, 10, 13, 17} 的 6 个样例,其中正例占
p
1
=
3
6
p_1=\frac{3}{6}
p1=63,反例占
p
2
=
3
6
p_2=\frac{3}{6}
p2=63; 则
- 同理
- 子集
D
1
D^1
D1 包含编号为 {1, 4, 6, 10, 13, 17} 的 6 个样例,其中正例占
p
1
=
3
6
p_1=\frac{3}{6}
p1=63,反例占
p
2
=
3
6
p_2=\frac{3}{6}
p2=63; 则
- 于是,属性"色泽"的信息增益为
- 类似的,我们可计算出其他属性的信息增益:
- 显然,属性"纹理"的信息增益最大,于是它被选为划分属性
- 然后,决策树学习算法将对每个分支结点做进一步划分, 最终得到的
决策树如图 4.4 所示.
增益率 (gain ratio) (C4.5)
- 在上面的介绍中,我们有意忽略了表 4.1 中的 “编号” 这一列. 若把 “编号” 也作为一个候选划分属性,则根据式件均可计算出它的信息增益为 0.998,远大于其他候选划分属性
- 这很容易理解: "编号"将产生 17 个分支,每个分支结点仅包含一个样本,这些分支结点的纯度己达最大. 然而,这样的决策树显然不具有泛化能力,无法对新样本进行有效预测
- 实际上,信息增益准则对可取值数目较多的属性有所偏好,为减少这种偏好可能带来的不利影响,著名的 C4.5 决策树算法不直接使用信息增益,而是使用"增益率"来选择最优划分属性. 采用与式 (4.2) 相同的符号表示,增益率定义为
其中
称为属性 a a a 的"固有值" (intrinsic value),即训练数据集 D D D 关于特征 a a a 的熵. 属性 a a a 的可能取值数目越多(即 V V V 越大),则 I V ( a ) IV(a) IV(a) 的值通常会越大.- 例如,对表 4.1 的西瓜数据集 2.0,有 I V ( 触感 ) = 0.874 IV(触感) = 0.874 IV(触感)=0.874 ( V = 2 V = 2 V=2), I V ( 色泽 ) = 1.580 IV(色泽) = 1.580 IV(色泽)=1.580 ( V = 3 V = 3 V=3), I V ( 编号 ) = 4.088 IV(编号) = 4.088 IV(编号)=4.088 ( V = 17 V = 17 V=17).
- 需注意的是,增益率准则对可取值数目较少的属性有所偏好. 因此, C4.5 算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式: 先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的.
基尼指数 (Gini index) (CART)
CART: Classification and Regression Tree; 分类和回归任务都可用
- 数据集
D
D
D 的纯度可用基尼值来度量:
- 直观来说, G i n i ( D ) Gini(D) Gini(D) 反映了从数据集 D D D 中随机抽取两个样本,其类别标记不一致的概率. 因此, G i n i ( D ) Gini(D) Gini(D) 越小,则数据集 D D D 的纯度越高.
- 属性
a
a
a 的基尼指数定义为
- 于是,我们在候选属性集合 A A A 中,选择那个使得划分后基尼指数最小的属性作为最优划分属性,即 a ∗ = arg min a ∈ A Gini_index ( D , a ) . a_{*}=\underset{a \in A}{\arg \min } \text{ Gini\_index} (D, a) \text { . } a∗=a∈Aargmin Gini_index(D,a) .
CART 分类树的构造算法
由于 CART 分类树是一棵二叉树,因此 CART 不直接按照式 (4.6) 进行划分
- (1) 对每个属性
a
a
a 的每个可能取值
v
v
v,将数据集
D
D
D 分为
a
=
v
a = v
a=v 和
a
≠
v
a \neq v
a=v 两部分来计算基尼指数,即
Gini_index ( D , a ) = ∣ D a = v ∣ ∣ D ∣ Gini ( D a = v ) + ∣ D a ≠ v ∣ ∣ D ∣ Gini ( D a ≠ v ) \text { Gini\_index }(D, a)=\frac{\left|D^{a=v}\right|}{|D|} \operatorname{Gini}\left(D^{a=v}\right)+\frac{\left|D^{a \neq v}\right|}{|D|} \operatorname{Gini}\left(D^{a \neq v}\right) Gini_index (D,a)=∣D∣∣Da=v∣Gini(Da=v)+∣D∣ Da=v Gini(Da=v) - (2) 选择基尼指数最小的属性及其对应取值作为最优划分属性和最优划分点
- (3) 重复以上两步,直至满足停止条件
剪枝处理 (pruning)
- 在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,导致过拟合. 因此,可通过主动去掉一些分支来降低过拟合的风险
基本策略
- “预剪枝” (prepruning): 在决策树生成过程中,对每个结点在划分前先进行估计,若当前结点的划分不能带来决策树泛化性能提升,则停止划分并将当前结点标记为叶结点
- “后剪枝” (postpruning): 先从训练集生成一棵完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来决策树泛化性能提升,则将该子树替换为叶结点
下面用留出法来判断决策树泛化性能是否提升,即预留一部分数据用作"验证集"以进行性能评估;同时假定采用信息增益准则来进行划分属性选择
预剪枝 (prepruning)
- 基于信息增益准则,我们会选取属性"脐部"来对训练集进行划分,并产生 3 个分支,如图 4.6 所示. 然而,是否应该进行这个划分呢? 预剪枝要对划分前后的泛化性能进行估计
- 在划分之前,所有样例集中在根结点. 若不进行划分,则该结点将被标记为叶结点,其类别标记为训练样例数最多的类别 (当样例最多的类不唯一时,可任选其中一类),假设我们将这个叶结点标记为 “好瓜”. 用验证集对这个单结点决策树进行评估, 则编号为 {4, 5, 8} 的样例被分类正确, 另外 4 个样例分类错误,于是,验证集精度为 3 7 = 42.9 % \frac{3}{7}=42.9\% 73=42.9%
- 在用属性"脐部"划分之后, 图 4.6 中的结点 ②、③、④ 分别包含编号为 {1, 2, 3, 14} 、{6, 7, 15, 17} 、{10, 16} 的训练样例,因此这 3 个结点分别被标记为叶结点"好瓜"、“好瓜”、“坏瓜”. 此时,验证集中编号为 {4, 5, 8, 11, 12} 的样例被分类正确,验证集精度为 5 7 = 71.4 % > 42.9 % \frac{5}{7}= 71.4\% > 42.9\% 75=71.4%>42.9%. 于是,用"脐部"进行划分得以确定.
- 同理,结点 ②③ 在划分后均不能提升验证集精度,于是,预剪枝策略禁止结点 ②③ 被划分. 对结点 ④, 其所含训练样例己属于同一类,不再进行划分.
- 于是, 基于预剪枝策略从表 4.2 数据所生成的决策树如图 4.6 所示,其验证集精度为 71. 4%. 这是一棵仅有一层划分的决策树,亦称"决策树桩" (decision stump).
- 对比图 4.6 和图 4.5 可看出,预剪枝使得决策树的很多分支都没有"展开", 这不仅降低了过拟合风险,还显著减少了决策树的训练及测试时间开销
- 但另一方面,有些分支的当前划分虽不能提升泛化性能、甚至可能导致泛化性能暂时下降,但在其基础上进行的后续划分却有可能导致性能显著提高; 预剪枝基于"贪心"本质禁止这些分支展开,给预剪枝决策树带来了欠拟含的风险
后剪枝 (postpruning)
- 后剪枝先从训练集生成一棵完整决策树. 例如基于表 4.2 的数据我们得到如图 4.5 所示的决策树. 该决策树的验证集精度为 42.9%
- 后剪枝首先考察图 4.5 中的结点 ⑥. 若将其领衔的分支剪除,则相当于把 ⑤ 替换为叶结点. 替换后的叶结点包含编号为 {7, 15} 的训练样本,于是该叶结点的类别标记为"好瓜",此时决策树的验证集精度提高至 57.1%. 于是,后剪枝策略决定剪枝. 同理,依次考察结点 ⑤③②①,最终对 ② 进行剪枝. 最终?基于后剪枝策略从表 4.2 数据所生成的决策树如图 4.7 所示,其验证集精度为 71. 4%.
- 对比图 4.7 和图 4.6 可看出, 后剪枝决策树通常比预剪枝决策树保留了更多的分支. 一般情形下, 后剪枝决策树的欠拟合风险很小,泛化性能往往优于预剪枝决策树.
- 但后剪枝过程是在生成完全决策树之后进行的, 并且要自底向上地对树中的所有非叶结点进行逐一考察,因此其训练时间开销比未剪枝决策树和预剪枝决策树都要大得多
决策树整体的损失函数 (ID3 / C4.5)
- 上面的剪枝策略都是根据决策树在验证集上的精度来进行的,在李航的《统计学习方法》中,剪枝则是为了减小决策树整体的损失函数
利用损失函数最小原则进行剪枝
- 设树
T
T
T 的叶结点个数为
∣
T
∣
|T|
∣T∣,
t
t
t 是树
T
T
T 的叶结点,该叶结点有
N
t
N_t
Nt 个样本点,其中
k
k
k 类的样本点有
N
t
k
N_{tk}
Ntk 个,
k
=
1
,
.
.
.
,
K
k = 1,...,K
k=1,...,K,
H
t
(
T
)
H_t(T)
Ht(T) 为叶结点
t
t
t 上的经验熵,
α
≥
0
α\geq0
α≥0 为参数,则决策树学习的损失函数可以定义为:
其中经验熵为
- 在损失函数中,将上式右端的第 1 项记作
这时有
C ( T ) C(T) C(T) 表示模型对训练数据的预测误差,即模型与训练数据的拟合程度, ∣ T ∣ |T| ∣T∣ 表示模型复杂度,参数 α α α 为正则项的系数。所以,利用损失函数最小原则进行剪枝就是用正则化的极大似然估计进行模型选择
CART 剪枝
- 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}
- 然后通过交叉验证法在独立的验证数据集上对子树序列进行测试,从中选择最优子树
剪枝,形成—个子树序列
- 在剪枝过程中,计算子树的损失函数:
其中, T T T 为任意子树, C ( T ) C(T) C(T) 为对训练数据的预测误差 (如基尼指数), ∣ T ∣ |T| ∣T∣ 为子树的叶
结点个数, α \alpha α 为参数- 对固定的 α \alpha α, 一定存在使损失函数 C α ( T ) C_\alpha(T) Cα(T) 最小的子树,将其表示为 T α T_\alpha Tα。容易验证这样的最优子树是唯一的。当 α \alpha α 大的时候,最优子树 T α T_\alpha Tα 偏小;当 α \alpha α 小的时候,最优子树 T α T_\alpha Tα 偏大。极端情况,当 α = 0 \alpha=0 α=0 时, 整体树是最优的。当 α → + ∞ \alpha\rightarrow+\infty α→+∞ 时, 根结点组成的单结点树是最优的
- 可以用递归的方法对树进行剪枝。将
α
\alpha
α 从小增大,
0
=
α
0
<
α
1
<
⋅
⋅
⋅
<
α
n
<
+
∞
0=\alpha_0<\alpha_1 <··· < \alpha_n < +\infty
0=α0<α1<⋅⋅⋅<αn<+∞, 产生一系列的区间
[
α
i
,
α
i
+
1
)
,
i
=
0
,
1
,
.
.
.
,
n
[\alpha_i,\alpha_{i+1}), i =0 , 1,..., n
[αi,αi+1),i=0,1,...,n; 剪枝得到的子树序列对应着区间
[
α
i
,
α
i
+
1
)
,
i
=
0
,
1
,
.
.
.
,
n
[\alpha_i,\alpha_{i+1}), i =0 , 1,..., n
[αi,αi+1),i=0,1,...,n 的最优子树序列
{
T
0
,
T
1
,
.
.
.
T
n
}
\{T_0,T_1, ...T_n\}
{T0,T1,...Tn},序列中的子树是嵌套的
- 具体地,从整体树
T
0
T_0
T0 开始剪枝。对
T
0
T_0
T0 的任意内部结点
t
t
t,以
t
t
t 为单结点树的损失函数是
以 t t t 为根结点的子树 T t T_t Tt 的损失函数是
当 α \alpha α 充分小时, C α ( T t ) < C α ( t ) C_\alpha(T_t)<C_\alpha(t) Cα(Tt)<Cα(t),因此无需剪枝;当 α \alpha α 增大到 C ( t ) − C ( T t ) ∣ T t ∣ − 1 \frac{C(t)-C(T_t)}{|T_t|-1} ∣Tt∣−1C(t)−C(Tt) 时, C α ( T t ) = C α ( t ) C_\alpha(T_t)=C_\alpha(t) Cα(Tt)=Cα(t),但 t t t 的结点比 T t T_t Tt 更少,因此需要对 T t T_t Tt 剪枝;当 α \alpha α 继续增大时, C α ( T t ) > C α ( t ) C_\alpha(T_t)>C_\alpha(t) Cα(Tt)>Cα(t),需要剪枝。由此可见,当 α \alpha α 不断增大时,存在一个阈值 g ( t ) g(t) g(t) 使得 α ≥ g ( t ) \alpha\geq g(t) α≥g(t) 时需要对 T t T_t Tt 进行剪枝:
- 由上面的分析可知,我们可以对 T 0 T_0 T0 中每一内部结点 t t t 都计算 g ( t ) g(t) g(t),并找出最小的 g ( t ) g(t) g(t) 对应的结点 t 0 t_0 t0,并将 α \alpha α 设为最小的 g ( t ) g(t) g(t) ,显然此时所有结点中只有结点 t 0 t_0 t0 需要被剪枝,因此我们将 t 0 t_0 t0 的子结点进行剪枝得到 T 1 T_1 T1,将最小的 g ( t ) g(t) g(t) 记为 α 1 \alpha_1 α1。 T 0 T_0 T0 为区间 [ α 0 , α 1 ) [\alpha_0,\alpha_1) [α0,α1) 的最优子树
- 重复上述步骤,可以得到子树 T 1 T_1 T1 为区间 [ α 1 , α 2 ) [\alpha_1,\alpha_2) [α1,α2) 的最优子树,如此剪枝下去,直至得到根结点。在这一过程中,不断地增加 α α α 的值, 产生新的区间
- 具体地,从整体树
T
0
T_0
T0 开始剪枝。对
T
0
T_0
T0 的任意内部结点
t
t
t,以
t
t
t 为单结点树的损失函数是
在剪枝得到的子树序列 { T 0 , T 1 , . . . T n } \{T_0,T_1, ...T_n\} {T0,T1,...Tn} 中通过交叉验证选取最优子树 T α T_\alpha Tα
- 具体地,利用独立的验证数据集,测试子树序列 { T 0 , T 1 , . . . T n } \{T_0,T_1, ...T_n\} {T0,T1,...Tn} 中各棵子树的平方误差或基尼指数。平方误差或基尼指数最小的决策树被认为是最优的决策树
连续与缺失值
连续值处理: 二分法
- 下面讨论如何在决策树学习中使用连续属性
→
\rightarrow
→ 连续属性离散化
- 最简单的策略是采用二分法 (bi-partition) 对连续属性进行处理,这正是 C4.5 决策树算法中采用的机制
- 给定样本集 D D D 和连续属性 a a a, 基于划分点 t t t 可将 D D D 分为子集 D t − D_t^- Dt− 和 D t + D_t^+ Dt+, 其中 D t − D_t^- Dt− 包含那些在属性 a a a 上取值不大于 t t t 的样本,而 D t + D_t^+ Dt+ 则包含那些在属性 a a a 上取值大于 t t t 的样本
- 假定
a
a
a 在
D
D
D 上出现了
n
n
n 个不同的取值,将这些值从小到大进行排序,记为
{
a
1
,
a
2
,
.
.
.
,
a
n
}
\{a^1,a^2,...,a^n\}
{a1,a2,...,an},显然,对相邻的属性取值
a
i
a^i
ai 与
a
i
+
1
a^{i+1}
ai+1 来说,
t
t
t 在区间
[
a
i
,
a
i
+
1
)
[a^i,a^{i+1})
[ai,ai+1) 中取任意值所产生的划分结果相同. 因此,对连续属性
a
a
a, 我们可考察包含
n
−
1
n-1
n−1 个元素的候选划分点集合
- 例如,对于“密度”这个连续属性,已观测到的可能取值为 {0.243, 0.245, 0.343, 0.360, 0.403, 0.437, 0.481, 0.556, 0.593, 0.608, 0.634, 0.639, 0.657, 0.666, 0.697, 0.719, 0.774} 共 17 个值,根据公式(4.7)可知,此时
i
i
i 依次取 1 到16,那么“密度”这个属性的候选划分点集合为
- 例如,对于“密度”这个连续属性,已观测到的可能取值为 {0.243, 0.245, 0.343, 0.360, 0.403, 0.437, 0.481, 0.556, 0.593, 0.608, 0.634, 0.639, 0.657, 0.666, 0.697, 0.719, 0.774} 共 17 个值,根据公式(4.7)可知,此时
i
i
i 依次取 1 到16,那么“密度”这个属性的候选划分点集合为
- 于是,我们可对式 (4.2) 稍加改造以得到用连续属性
a
a
a 进行划分时可得到的最大信息增益:
- 由式 (4.8) 可计算出属性“密度” 的信息增益为 0.262, 对应于划分点 0.381 (
0.360
+
0.403
2
\frac{0.360+0.403}{2}
20.360+0.403). 最终生成如图 4.8 所示的决策树
- 由式 (4.8) 可计算出属性“密度” 的信息增益为 0.262, 对应于划分点 0.381 (
0.360
+
0.403
2
\frac{0.360+0.403}{2}
20.360+0.403). 最终生成如图 4.8 所示的决策树
- 需注意的是,与离散属性不同,若当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性,只是划分点选取的范围变小了
- 例如在父结点上使用了 “密度 ≤ 0.381 \leq0.381 ≤0.381" , 不会禁止在子结点上使用"密度 ≤ 0.294 \leq0.294 ≤0.294"
CART 回归树 (最小二乘回归树 (least squares regression tree))
- 在 CART 回归树中,同样是利用二分法来划分连续属性,但选择最佳切分点的依据是最小化平方误差
- 假设已将输入空间划分为
M
M
M 个单元
R
1
,
.
.
,
R
M
R_1,..,R_M
R1,..,RM 并且在每个单元
R
m
R_m
Rm 上有一个固定的输出值
c
m
c_m
cm,于是回归树模型可表示为:
当输入空间的划分确定时,可以用平方误差 ∑ x i ∈ R m ( y i − f ( x i ) ) 2 \sum_{x_i\in R_m}(y_i-f(x_i))^2 ∑xi∈Rm(yi−f(xi))2 来表示回归树对于训练数据的预测误差,用平方误差最小的准则求解每个单元上的最优输出值。易知,单元 R m R_m Rm 上的 c m c_m cm 的最优值与是 R m R_m Rm 上的所有输入实例 x i x_i xi 对应的输出 y i y_i yi 的均值,即
- 问题是怎样对输入空间进行划分。这里采用启发式的方法,选择第
j
j
j 个变量
x
(
j
)
x^{(j)}
x(j) 和它取的值
s
s
s,作为切分变量 (splitting variable) 和切分点 (splitting point),并定义两个区域:
然后寻找最优切分变量 j j j 和最优切分点 s s s。具体地,求解
即
min j , s [ ∑ x i ∈ R 1 ( j , s ) ( y i − c ^ 1 ) 2 + ∑ x i ∈ R 2 ( j , s ) ( y i − c ^ 2 ) 2 ] \min _{j, s}\left[ \sum_{x_{i} \in R_{1}(j, s)}\left(y_{i}-\hat c_{1}\right)^{2}+ \sum_{x_{i} \in R_{2}(j, s)}\left(y_{i}-\hat c_{2}\right)^{2}\right] j,smin xi∈R1(j,s)∑(yi−c^1)2+xi∈R2(j,s)∑(yi−c^2)2 其中
- 为此,我们只需遍历所有输入变量,找到最优的切分变量 j j j,并遍历出最优切分点 s s s,构成一个对 ( j , s ) (j, s) (j,s) 即可
缺失值处理
- 现实任务中常会遇到不完整样本,即样本的某些属性值缺失. 如果简单地放弃不完整样本,仅使用无缺失值的样本来进行学习,显然是对数据信息极大的浪费
- 例如,表 4.4 西瓜数据集 2.0 出现缺失值的版本,如果放弃不完整样本,则仅有编号 {4, 7, 14, 16} 的 4 个样本能被使用. 显然,有必要考虑利用有缺失属性值的训练样例来进行学习
- 例如,表 4.4 西瓜数据集 2.0 出现缺失值的版本,如果放弃不完整样本,则仅有编号 {4, 7, 14, 16} 的 4 个样本能被使用. 显然,有必要考虑利用有缺失属性值的训练样例来进行学习
(1) 如何在属性值缺失的情况下进行划分属性选择?
- 给定训练集 D D D 和属性 a a a,令 D ~ \tilde D D~ 表示 D D D 中在属性 a a a 上没有缺失值的样本子集. 对问题 (1),显然我们仅可根据 D ~ \tilde D D~ 来判断属性 a a a 的优劣. 假定属性 a a a 有 V V V 个可取值 { a 1 , … , a V } \{a^1,…,a^V\} {a1,…,aV},令 D ~ v \tilde D^v D~v 表示 D ~ \tilde D D~ 中在属性 a a a 上取值为 a v a^v av 的样本子集, D ~ k \tilde D_k D~k 表示 D ~ \tilde D D~ 中属于第 k k k 类 ( k = 1 , 2 , . . . , ∣ Y ∣ k = 1, 2, .. . ,|\mathcal Y| k=1,2,...,∣Y∣) 的样本子集
- 假定我们为每个样本
x
\boldsymbol x
x 赋予一个权重
w
x
w_{\boldsymbol x}
wx (在决策树学习开始阶段,设置根结点中各样本的权重初始化为 1) 并定义
- 直观地看,对属性 a a a, ρ ρ ρ 表示无缺失值样本所占的比例; p ~ k \tilde p_k p~k 表示无缺失值样本中第 k k k 类所占的比例; r ~ v \tilde r_v r~v 则表示无缺失值样本中在属性 a a a 上取值 a v a^v av 的样本所占的比例
- 基于上述定义,我们可将信息增益的计算式 (4.2) 推广为
其中
其实就是在 D ~ \tilde D D~ 上计算信息增益,然后乘上一个权重 ρ \rho ρ 得到最终的信息增益,这个权重使结果考虑了缺失值的影响。如果某个属性缺失值很多,最后得到的信息增益也会较小
(2) 给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
- 若样本 x \boldsymbol x x 在划分属性 a a a 上的取值己知,则将 x \boldsymbol x x 划入与其取值对应的子结点,且样本权值在子结点中保持为 w x w_{\boldsymbol x} wx.
- 若样本
x
\boldsymbol x
x 在划分属性
a
a
a 上的取值未知,则将
x
\boldsymbol x
x 同时划入所有子结点, 且样本权值在与属性值
a
v
a^v
av 对应的子结点中调整为
r
~
v
⋅
w
x
\tilde r_v\cdot w_{\boldsymbol x}
r~v⋅wx
- 直观地看,这就是让同一个样本以不同的概率划入到不同的子结点中去.
C4.5 算法使用了上述解决方案
多变量决策树 (multivariate decision tree)
- 若我们把每个属性视为坐标空间中的一个坐标轴,则 d d d 个属性描述的样本就对应了 d d d 维空间中的一个数据点,对样本分类则意味着在这个坐标空间中寻找不同类样本之间的分类边界
- 决策树所形成的分类边界有一个明显的特点: 轴平行 (axis-parallel) ,即它的分类边界由若干个与坐标轴平行的分段组成. 如图 4.10, 4.11 所示,分类边界的每一段都是与坐标轴平行的. 这样的分类边界使得学习结果有较好的可解释性,因为每一段划分都直接对应了某个属性取值
- 但在学习任务的真实分类边界比较复杂时,必须使用很多段划分才能获得较好的近似. 如图 4.12 所示;此时的决策树会相当复杂,由于要进行大量的属性测试,预测时间开销会很大.
- 若能使用斜的划分边界,如图 4.12 中红色线段所示,则决策树模型将大为简化. “多变量决策树” 就是能实现这样的"斜划分"甚至更复杂划分的决策树.
- 以实现斜划分的多变量决策树为例,在此类决策树中,非叶结点不再是仅对某个属性,而是对属性的线性组合进行测试; 换言之,每个非叶结点是一个形如
∑
i
=
1
d
w
i
a
i
=
t
\sum_{i=1}^dw_ia_i=t
∑i=1dwiai=t 的线性分类器,其中
w
i
w_i
wi 是属性
a
i
a_i
ai 的权重,
w
i
w_i
wi 和
t
t
t 可在该结点所含的样本集和属性集上学得. 于是,多变量决策树在学习过程中,会试图建立一个合适的线性分类器
- 以实现斜划分的多变量决策树为例,在此类决策树中,非叶结点不再是仅对某个属性,而是对属性的线性组合进行测试; 换言之,每个非叶结点是一个形如
∑
i
=
1
d
w
i
a
i
=
t
\sum_{i=1}^dw_ia_i=t
∑i=1dwiai=t 的线性分类器,其中
w
i
w_i
wi 是属性
a
i
a_i
ai 的权重,
w
i
w_i
wi 和
t
t
t 可在该结点所含的样本集和属性集上学得. 于是,多变量决策树在学习过程中,会试图建立一个合适的线性分类器