1 基本流程
决策树(decision tree)是一类常见的机器学习方法。
一般包含:一个根结点、若干个内部结点和若干个叶结点。
- 叶结点:决策结果
- 其他每个结点:对应一个属性测试
- 每个结点包含的样本集合:根据属性测试的结果呗划分到子结点中
- 根结点:包含样本全集。
- 从根节点到每个叶结点的路径:对应了一个判定测试序列。
决策树学习目的:产生以可泛化能力强(处理未见实例能力强)的决策树,其基本流程遵循“分而治之”(divide-and-conquer)策略,如所示:
输入:训练集D={(x1,y1),(x2,y2),...,(xm,ym)}
属性集A={a1,a2,...,ad}
过程:函数TreeGenerate(D,A)
1.生成结点node;
2.if D中样本全属于同一类别C then:
3. 将node标记为C类叶结点;return
4. end if
5. if A=空集 or D中样本再A上取值相同 then:
6. 将node标记为叶结点,其类别标记为D中样本数最多的类;return
7. end if
8. 从A中选择最优划分属性a*;
9. for a*的每一个值a*v do:
10. 为node生成一个分支;
11. if Dv为空 then:
12. 将分支结点标记为叶结点,其类别标记为D中样本最多的类;return
13. else
14. 以TreeGenerate(Dv,A\{ak})为分支结点
15. end if
16. end for
输出:以node为根结点的一棵决策树
由上可知为一个递归过程,有三种情形会导致递归返回:
- 当前结点包含的样本全属于同一类别,无需划分;
- 当前属性集为空,或是所有样本再所有属性上取值相同,无法划分;
- 当前结点包含的样本集合为空,不能划分。
2 划分选择
2.1 信息增益
信息熵(information entropy):是度量样本集合纯度最常用的一种指标。
假定当前样本集合D中第k类样本所占的比例为
p
k
(
k
=
1
,
2
,
.
.
.
,
∣
y
∣
)
p_k(k=1,2,...,|y|)
pk(k=1,2,...,∣y∣),则D的信息熵定义为:
E
n
t
(
D
)
=
−
∑
k
=
1
∣
y
∣
p
k
log
2
p
k
Ent(D)=-\sum_{k=1}^{|y|}{p_k\log_2{p_k}}
Ent(D)=−∑k=1∣y∣pklog2pk
E
n
t
(
D
)
Ent(D)
Ent(D)的值越小,则D的纯度越高。
E n t ( D ) Ent(D) Ent(D)的最小值为0,最大值为 log 2 ∣ y ∣ \log_2{|y|} log2∣y∣
假定离散属性
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进行划分所获得的”信息增益“(information gain):
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)
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
∣
log
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
a
a的”固有值”(intrinsic value)
2.3 基尼系数
CART(Classification and Regression Tree)决策树使用“基尼系数”(Gini index)来选择划分属性。
数据
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^`{!=k}}p_kp_{k^`}=1-\sum_{k=1}^{|y|}p_k^2
Gini(D)=∑k=1∣y∣∑k‘!=kpkpk‘=1−∑k=1∣y∣pk2