基本流程
决策树(decision tree)是一类常见的机器学习方法。决策树是一个预测模型;他代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。 数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来作预测。
决策树的建立
输入: 训练集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
D = \{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}
D={(x1,y1),(x2,y2),...,(xm,ym)};
属性集:
A
=
{
a
1
,
a
2
,
.
.
.
,
a
d
}
a
∗
A=\{a_1,a_2,...,a_d\} a_*
A={a1,a2,...,ad}a∗
伪代码:
函数 TreeGenerate(D,A)
生成节点node:
if D 中的样本全属于同一类别 C then
将node标记为C类叶子节点;return
end if
if A = ϕ OR D 中样本在 A 上取值相同 then
将 node 标记为叶节点,其类别标记为 D 中样本数最多的类;return
end if
从A中选则最优划分属性a∗;
for a* 的每一个值a*(v) do
为node生成一个分支;令Dv表示D中在a*上取值为a*(v)的样本子集;
if Dv 为空 then
将分支节点标记为叶节点,其类别标记为D中样本最多的类;return
else
以Tree(Dv,A\{a*})为分支节点
end if
end for
输出 : 以node为根的一颗决策数
决策数的生成是一个递归的过程,在决策树基本算法中有三种情况会导致递归返回:
- 当前节点包含的样本种类属于同一类别,无需划分
- 当前样本属性集为空,或者所有样本在所有属性上的取值相同,无法划分
- 当前节点包含的样本集合为空,不能划分
划分选择
决策树算法的关键在于如歌选择最优划分属性,随着划分的不断进行,我们希望决策树的分支节点所包含的样本尽可能的属于同一类别。
信息熵
熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度。在信息论里面,熵是对不确定性的测量。但是在信息世界,熵越高,则能传输越多的信息,熵越低,则意味着传输的信息越少。
信息熵(information entropy)是度量样本集合纯度最常用的一种指标,假定当前样本集合
D
D
D中第
k
k
k类样本所占的比例为
p
k
(
k
=
1
,
2
,
.
.
.
,
∣
y
∣
)
p_k(k=1,2,...,|y|)
pk(k=1,2,...,∣y∣),则
D
D
D的信息熵定义为:
E
n
t
(
D
)
=
−
Σ
k
=
1
∣
y
∣
p
k
l
o
g
2
p
k
Ent(D)= - \Sigma_{k=1}^{|y|}p_k log_2p_k
Ent(D)=−Σk=1∣y∣pklog2pk
E
n
t
(
D
)
Ent(D)
Ent(D)的值越小,则
D
D
D的纯度越高
信息增益与ID3算法
假定离散属性
a
a
a有
V
V
V个可能的取值
{
a
1
,
a
2
,
.
.
.
,
a
V
}
\{a^1,a^2,...,a^V\}
{a1,a2,...,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,我们可以计算出
D
v
D^v
Dv的信息熵,在考虑到不同的分支节点包含的样本数的不同,给分支节点赋予权重
∣
D
v
∣
/
∣
D
∣
|D^v|/|D|
∣Dv∣/∣D∣,
信息增益:
G
a
i
n
(
D
,
a
)
=
E
n
t
(
D
)
−
Σ
1
V
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
Gain(D,a)=Ent(D)-\Sigma_1^V\frac{|D^v|}{|D|}Ent(D^v)
Gain(D,a)=Ent(D)−Σ1V∣D∣∣Dv∣Ent(Dv)
∣
D
v
∣
∣
D
∣
E
n
t
(
D
v
)
\frac{|D^v|}{|D|}Ent(D^v)
∣D∣∣Dv∣Ent(Dv)可记为
E
n
t
(
a
v
∣
a
)
Ent(a^v|a)
Ent(av∣a)表示特征属性
a
a
a的条件下样本的条件熵,信息增益越大,则以为则使用属性
a
a
a来进行划分所获得的纯度越高,因此可以用来作为属性划分的依据
a
∗
=
a
r
g
m
i
n
G
a
i
n
(
D
,
a
)
,
a
∈
A
a_*=argmin Gain(D,a) ,a \in A
a∗=argminGain(D,a),a∈A
这也是ID3(Iterative Dichotomiser 3)算法的原理。
决策树ID3算法请参考:传送门
信息增益率与C4.5算法
C4.5决策树算法不直接使用信息增益,而是使用信息增益率来选择最优划分属性。
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)}
Gainratio(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)=-\Sigma_{v=1}^V\frac{|D^v|}{|D|}log_2\frac{|D^v|}{|D|}
IV(a)=−Σv=1V∣D∣∣Dv∣log2∣D∣∣Dv∣
I
V
(
a
)
IV(a)
IV(a)称为属性a的固有值,属性a的可能取值数目越多,则
I
V
(
a
)
IV(a)
IV(a)的值通常会越大。增益率准则对取值数目较少的属性有所偏好。
决策树C4.5算法:传送门
基尼指数与分类回归树
CART树(Classification and Regression Tree)使用基尼指数来选择属性的划分,通过基尼值来度量数据集的纯度
基尼值:
G
i
n
i
(
D
)
=
Σ
k
=
1
∣
y
∣
Σ
k
′
≠
k
p
k
p
k
′
=
1
−
Σ
k
=
1
∣
y
∣
p
k
2
Gini(D)=\Sigma_{k=1}^{|y|}\Sigma_{k^{'}\neq k}p_kp_k{'}=1-\Sigma_{k=1}^{|y|}p_k^2
Gini(D)=Σk=1∣y∣Σk′=kpkpk′=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)越小,数据集的纯度越高。
基尼指数:
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)=\Sigma_{v=1}^V\frac{|D^v|}{|D|}Gini(D^v)
Giniindex(D,a)=Σv=1V∣D∣∣Dv∣Gini(Dv)
于是我们在候选属性集合
A
A
A中选择使那个划分后基尼指数最小的那个属性作为最优划分属性。
CRAT算法:传送门
过拟合处理
在决策树学习中,为了尽可能正确分类训练样本,结点划分过程将不断重复,有时会造成决策树分支过多,导致过拟合,因此可以通过主动去掉一些分支来降低过拟合的风险。
剪枝的基本策略有:预剪枝和后剪枝
预剪枝
预剪枝是在决策树生成的过程中,对每个结点在划分前先进行预估,若当前结点的划分不能使决策树泛化性能提升,则停止划分并将当前结点标记为叶节点。
后剪枝
后剪枝是先从训练集中生成一颗完整的决策树,然后自底向上的对非叶子结点进行考察,若将改结点对应的子树替换为叶子结点能提高泛化能力,则进行替换。
连续值缺失值处理
连续值处理
由于连续属性的可能取值不再有限,因此不能直接根据连续属性的可能取值进行划分。我们可以使用离散化技术对其进行处理。
二分法:
给定样本集
D
D
D,和连续属性
a
a
a,
a
a
a在
D
D
D上出现了n个不同的取值,
将其排序
{
a
1
,
a
2
,
.
.
.
,
a
n
}
\{a^1,a^2,...,a^n\}
{a1,a2,...,an},然后基于划分点
t
t
t将样本划分为
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+反之。通常将划分点设为该属性在训练集中出现额不大于中位点的最大值从而是的最终决策树使用的划分点都在训练集中出现过。
eg:
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
{
G
a
i
n
(
D
,
a
,
t
)
∣
t
∈
T
a
}
Gain(D,a)=max\{Gain(D,a,t)|t \in T_a\}
Gain(D,a)=max{Gain(D,a,t)∣t∈Ta}
G
a
i
n
(
D
,
a
)
=
m
a
x
{
E
n
t
(
D
)
−
Σ
λ
∈
{
+
,
−
}
∣
D
t
λ
∣
∣
D
∣
E
n
t
(
D
t
λ
)
∣
t
∈
T
a
}
Gain(D,a)=max\{Ent(D) - \Sigma_{\lambda\in \{+,-\}} \frac{|D_t^{\lambda}|}{|D|}Ent(D_t^{\lambda})|t \in T_a\}
Gain(D,a)=max{Ent(D)−Σλ∈{+,−}∣D∣∣Dtλ∣Ent(Dtλ)∣t∈Ta}
G
a
i
n
(
D
,
a
,
t
)
Gain(D,a,t)
Gain(D,a,t)是样本
D
D
D基于划分点
t
t
t的信息增益,选择使得
G
a
i
n
(
D
,
a
,
t
)
Gain(D,a,t)
Gain(D,a,t)最大化的划分点。
缺失值处理
现实任务中常常会遇到不完整的样本,也就是样本中的某些属性值缺失的情况,最简单的方法是直接去除缺失的数据,但是这是对数据信息的极大浪费,我们可以考虑下利用有缺失属性值的样本来进行学习。
需解决的问题:
- 在属性值缺失的情况下进行划分属性的选择
- 给定划分属性,若样本在该属性上的值缺失,如何进行划分
给定训练集 D D D,属性集 a a a,令 D ‾ \overline{D} D表示 D D D中在属性 a a a上没有缺失值的样本子集
对于问题一,根据
D
‾
\overline{D}
D来判断属性
a
a
a的优劣,属性
a
a
a的取值
{
a
1
,
.
.
.
,
a
V
}
\{a^1,...,a^V\}
{a1,...,aV},令
D
‾
v
\overline{D}^v
Dv表示
D
‾
\overline{D}
D在
a
a
a上取值为
v
v
v的样本子集,
D
‾
k
\overline{D}_k
Dk表示
D
‾
\overline{D}
D中属于第
k
,
(
k
=
1
,
2
,
3...
,
∣
y
∣
)
k,(k=1,2,3...,|y|)
k,(k=1,2,3...,∣y∣)类的样本子集
D
‾
=
∪
k
=
1
∣
y
∣
D
‾
k
\overline{D}=\cup_{k=1}^{|y|}\overline{D}_k
D=∪k=1∣y∣Dk,
D
‾
=
∪
v
=
1
V
D
‾
v
\overline{D}=\cup_{v=1}^{V}\overline{D}^v
D=∪v=1VDv,假定为每一个样本赋予一个权重
w
x
w_x
wx
设
ρ
=
Σ
x
∈
D
‾
w
x
/
Σ
x
∈
D
w
x
\rho ={ \Sigma_{x \in \overline{D} } w_x } / { \Sigma_{x \in D } w_x }
ρ=Σx∈Dwx/Σx∈Dwx
p
‾
k
=
Σ
x
∈
D
‾
k
w
x
/
Σ
x
∈
D
w
x
\overline{p}_k ={ \Sigma_{x \in \overline{D}_k } w_x } / { \Sigma_{x \in D } w_x }
pk=Σx∈Dkwx/Σx∈Dwx
r
‾
v
=
Σ
x
∈
D
‾
v
w
x
/
Σ
x
∈
D
w
x
\overline{r}_v ={ \Sigma_{x \in \overline{D}^v } w_x } / { \Sigma_{x \in D } w_x }
rv=Σx∈Dvwx/Σx∈Dwx
ρ
\rho
ρ表示属性
a
a
a上无缺样本所占比例,
p
‾
k
\overline{p}_k
pk表示无缺样本中第
k
k
k类所占的比例,
r
‾
v
\overline{r}_v
rv表示无缺样本中属性
a
a
a上取值为
a
v
a^v
av的所占的比例。
推广到信息增益公式上:
G
a
i
n
(
D
,
a
)
=
ρ
∗
G
a
i
n
(
D
‾
,
a
)
Gain(D,a)=\rho * Gain(\overline{D},a)
Gain(D,a)=ρ∗Gain(D,a)
G
a
i
n
(
D
,
a
)
=
ρ
∗
(
E
n
t
(
D
‾
)
−
Σ
v
=
1
V
r
‾
v
E
n
t
(
D
‾
v
)
)
Gain(D,a)=\rho *(Ent(\overline{D})-\Sigma_{v=1}^V \overline{r}_v Ent(\overline{D}^v))
Gain(D,a)=ρ∗(Ent(D)−Σv=1VrvEnt(Dv))
其中
E
n
t
(
D
‾
)
=
−
Σ
k
=
1
∣
y
∣
p
‾
k
l
o
g
2
p
‾
k
Ent(\overline{D}) = -\Sigma_{k=1}^{|y|} \overline{p}_k log_2\overline{p}_k
Ent(D)=−Σk=1∣y∣pklog2pk
对于问题二,样本 x x x在属性 a a a上的取值缺失,则将 x x x划分到所有额子结点中,将权值变为 r ‾ v ∗ w x \overline{r}_v * w_x rv∗wx,意思i将同一个样本以不同的概率划入到同的子结点中。