1 基本流程
决策过程的最终结论对应了所希望的判定结果。
决策过程中提出的每个判定问题是对某个属性的测试。
一个决策树包含一个根节点,若干个内部节点和若干个叶节点。叶节点对应决策结果。其他每个结点则对应于一个属性测试;每个结点包含的样本集合根据属性测试的结果被划分到子结点中;根结点包含样本全集.从根结点到每个叶结点的路径对应了一个判定测试序列.决策树学习的目的是为了产生一棵泛化能力强,即处理未见示例能力强的决策树。
这是一个递归过程,三个情况会递归返回。
1.当前节点包含的样本同属于一个类别,例如都是好瓜,不需要划分。
2.当前属性集为空(因为每一次分类都会剔除一个已经分类了的属性)或者所有样本再所有属性上的取值相同(所有样本再属性值上无区别,因此无法划分)。
3.当前节点包含的样本集合为空,不能划分。
2 划分选择
决策树学习的关键是如何选择最优划分属性。目的是使决策树的分支节点所包含的样本尽可能属于同一类别。
2.1 信息增益
信息熵:度量样本集合纯度的指标。
D的信息熵定义为:
E
n
t
(
D
)
=
−
∑
k
=
1
∣
y
∣
p
k
l
o
g
2
p
k
Ent(D)=-\sum_{k=1}^{|y|}p_klog_2p_k
Ent(D)=−∑k=1∣y∣pklog2pk
其中D为样本集合,
p
k
p_k
pk为D中第k类样本所占的比例。
E
n
t
(
D
)
Ent(D)
Ent(D)的值越小,D的纯度越高。
使用离散属性a进行划分时,会根据a有V个可能取值划分为V类,可以计算属性a对样本集D进行划分的信息增益。
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
Gain(D,a)=Ent(D)-\sum_{v=1}^{V}\frac{|D^v|}{|D|}Ent(D^v)
Gain(D,a)=Ent(D)−∑v=1V∣D∣∣Dv∣Ent(Dv)
信息增益越大,使用该属性a进行划分所得到的纯度提升越大。由此使用信息增益来进行决策树的划分属性选择。将当前属性集合中每一个属性的信息增益计算处理挑选信息增益最大的属性来进行划分。以此类推,每一个节点都是用信息增益来进行划分。
2.2 增益率
上述的信息增益准则对可取值数目较多的属性有所偏好。而使用增益率则修正了分叉数量导致的熵增益。
增益率定义为:
G
a
i
n
_
r
a
t
i
o
(
D
,
a
)
=
G
a
i
n
(
D
,
a
)
I
V
(
a
)
Gain\_ratio(D,a)=\frac{Gain(D,a)}{IV(a)}
Gain_ratio(D,a)=IV(a)Gain(D,a),
I
V
(
a
)
=
−
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
l
o
g
2
∣
D
v
∣
∣
D
∣
IV(a)=-\sum_{v=1}^{V} \frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|}
IV(a)=−∑v=1V∣D∣∣Dv∣log2∣D∣∣Dv∣
属性a的取值数目越多(V越大),IV(a)的值越大。
注意:增益率准则对可取值数目较少的属性有所偏好。
2.3 基尼指数
CART决策树使用基尼指数来选择划分属性。
数据集D的纯度使用基尼值来度量:
G
i
n
i
(
D
)
=
1
−
∑
k
=
1
∣
y
∣
p
k
2
Gini(D)=1-\sum_{k=1}^{|y|}p_k^2
Gini(D)=1−∑k=1∣y∣pk2
Gini(D)越小,数据集D的纯度越高。
属性a的基尼指数定义:
G
i
n
i
_
i
n
d
e
x
(
D
,
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
G
i
n
i
(
D
v
)
Gini\_index(D,a)=\sum_{v=1}^{V}\frac{|D^v|}{|D|}Gini(D^v)
Gini_index(D,a)=∑v=1V∣D∣∣Dv∣Gini(Dv)
在候选属性集合A中,选择使得划分后基尼指数最小的属性作为最优划分属性。
3 剪枝处理
剪枝处理是为了对付过拟合的主要手段,在决策树学习中,可能由于训练集中的特殊样本,导致分支过于细致,训练样本学习过好,导致在实际应用中效果不好。
剪枝分为预剪枝和后剪枝,两则都是为了提升决策树的泛化能力。
将训练集中一部分预留作为验证集来进行性能评估,以此检测剪枝前后泛化能力是否提高。
3.1 预剪枝
决策树生成过程中,使用验证集中的数据对每一个结点划分前后的验证集精度进行比较,并且决定当前结点是否划分。
优点:降低过拟合风险,减少训练时间开销和测试时间开销。
缺点:由于基于贪心算法,如果将结点进行多次划分,可能泛化能力能够得到更大的提高,可能有欠拟合的风险。
3.2 后剪枝
后剪枝先从训练集生成一颗完整决策树,之后自底向上对非叶节点进行考察,如果将该节点的子树替换为叶节点能带来泛化性能的提升,将子树替换为叶结点。
也是通过使用验证集中的数据对结点替换前后的验证集精度进行比较,来确定是否替换为叶节点。
优点:保留了更多分支,欠拟合风险小,泛化能力强。
缺点:训练时间和测试时间开销大。
4 连续与缺失值
4.1 连续值处理
属性中会有连续值,连续属性的可取值数目不再有限,不能直接使用连续属性的可取值来对结点进行划分。这时候需要将连续属性离散化,最简单策略是使用二分法对连续属性进行处理。
将n个连续属性从小到大排序,并且使用两个属性值的中值来取n-1个元素的候选划分点集合:
T
a
=
{
a
i
+
a
i
+
1
2
∣
1
≤
i
≤
n
−
1
}
T_a=\{\frac{a^i+a^{i+1}}{2}|1\le i\le n-1\}
Ta={2ai+ai+1∣1≤i≤n−1}
之后可以对这些划分点进行考察,选取最优的划分点。
G
a
i
n
(
D
,
a
)
=
m
a
x
E
n
t
(
D
)
−
∑
∣
D
t
λ
∣
∣
D
∣
E
n
t
(
D
t
λ
)
Gain(D,a)=max Ent(D)-\sum \frac{|D_t^\lambda |}{|D|}Ent(D_t^\lambda)
Gain(D,a)=maxEnt(D)−∑∣D∣∣Dtλ∣Ent(Dtλ)
注意:当前结点划分属性为连续属性,该属性还可作为其后代结点的划分属性。
4.2 缺失值处理
两个问题:
1.如何在属性值确实的情况下进行划分属性选择?
2.给定划分属性,若样本在该属性上的值缺失,如何对样本进行划分?
- 问题一:
给定训练集 D 和属性 a , 令 D ~ \tilde{D} D~表示 D 中在属性 a 上没有缺失值的样本子集. 对问题(1), 显然我们仅可根据 D ~ \tilde{D} D~ 来判断属性 a 的优劣. 假定属性 a 有 V 个可取值 { a 1 , a 2 , … , a V } \left\{a^{1}, a^{2}, \ldots, a^{V}\right\} {a1,a2,…,aV} , 令 D ~ v 表示 D ~ \tilde{D}^{v} 表示 \tilde{D} D~v表示D~ 中在属性 a 上取值为 a v a^{v} av 的样本子集, D ~ k \tilde{D}_{k} D~k 表示 D ~ \tilde{D} D~ 中属于第 k 类 (k=1,2, … , ∣ Y ∣ \ldots,|\mathcal{Y}| …,∣Y∣) 的样本子集, 则显然有 D ~ = ⋃ k = 1 ∣ Y ∣ D ~ k \tilde{D}=\bigcup_{k=1}^{|\mathcal{Y}|} \tilde{D}_{k} D~=⋃k=1∣Y∣D~k , D ~ = ⋃ v = 1 V D ~ v \tilde{D}=\bigcup_{v=1}^{V} \tilde{D}^{v} D~=⋃v=1VD~v . 假定我们为每个样本 x \boldsymbol{x} x 赋予一个权重 w x w_{\boldsymbol{x}} wx , 并定义
ρ = ∑ x ∈ D ~ w x ∑ x ∈ D w x , p ~ k = ∑ x ∈ D ~ k w x ∑ x ∈ D ~ w x ( 1 ⩽ k ⩽ ∣ Y ∣ ) , r ~ v = ∑ x ∈ D ~ v w x ∑ x ∈ D ~ 2 w x ( 1 ⩽ v ⩽ V ) . \begin{aligned} \rho & =\frac{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in D} w_{\boldsymbol{x}}}, \\ \tilde{p}_{k} & =\frac{\sum_{\boldsymbol{x} \in \tilde{D}_{k}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}} w_{\boldsymbol{x}}} \quad(1 \leqslant k \leqslant|\mathcal{Y}|), \\ \tilde{r}_{v} & =\frac{\sum_{\boldsymbol{x} \in \tilde{D}^{v}} w_{\boldsymbol{x}}}{\sum_{\boldsymbol{x} \in \tilde{D}^{2}} w_{\boldsymbol{x}}} \quad(1 \leqslant v \leqslant V) . \end{aligned} ρp~kr~v=∑x∈Dwx∑x∈D~wx,=∑x∈D~wx∑x∈D~kwx(1⩽k⩽∣Y∣),=∑x∈D~2wx∑x∈D~vwx(1⩽v⩽V).
直观地看, 对属珄 a,
ρ
\rho
ρ 表示无缺失值样本所占的比例,
p
~
k
\tilde{p}_{k}
p~k 表示无缺失值样本中第 k 类所占的比例,
r
~
v
\tilde{r}_{v}
r~v 则表示无缺失值样本中在属性 a 上取值
a
v
a^{v}
av 的样本所占的比例. 显然,
∑
k
=
1
∣
Y
∣
p
~
k
=
1
,
∑
v
=
1
V
r
~
v
=
1
\sum_{k=1}^{|\mathcal{Y}|} \tilde{p}_{k}=1, \sum_{v=1}^{V} \tilde{r}_{v}=1
∑k=1∣Y∣p~k=1,∑v=1Vr~v=1 .
基于上述定义, 我们可将信息增益推广为
Gain ( D , a ) = ρ × Gain ( D ~ , a ) = ρ × ( Ent ( D ~ ) − ∑ v = 1 V r ~ v Ent ( D ~ v ) ) , \begin{aligned} \operatorname{Gain}(D, a) & =\rho \times \operatorname{Gain}(\tilde{D}, a) \\ & =\rho \times\left(\operatorname{Ent}(\tilde{D})-\sum_{v=1}^{V} \tilde{r}_{v} \operatorname{Ent}\left(\tilde{D}^{v}\right)\right), \end{aligned} Gain(D,a)=ρ×Gain(D~,a)=ρ×(Ent(D~)−v=1∑Vr~vEnt(D~v)),
- 问题二:若样本x在划分属性a上的取值未知,将x同时划入所有子结点,且样本权值在与属性 a v a^v av对应的子结点中调整为 r ~ v ∗ w x \tilde r_v*w_x r~v∗wx。
5 多变量决策树
之前介绍的都是单变量决策树,一个结点只进行一个变量的判断。所形成的分类边界都是轴平行的。例如下图:
多变量决策树是能实现斜划分或者更复杂划分的决策树。非叶结点不是仅对某个属性,而是对属性的线性组合进行测试,每个非叶结点是一个形如 ∑ i = 1 d w i a i = t \sum_{i=1}^{d}w_ia_i=t ∑i=1dwiai=t的线性分类器。