决策树 - Decision Tree
按照树的类型:
- 分类树
- 回归树
按照树的构建:
- 信息增益–ID3
- 信息增益率–C4.5
- 基尼系数–CART
决策树是什么,定义?
使用树形结构将数据进行分类,每个内部节点对应一个输入属性,子节点代表父节点属性的可能取值,叶子节点对应一个预测结果。
-
总体流程
1、自根至叶的递归过程;
2、在每个中间结点寻找一个“划分”(split or test)属性。 -
决策树的三种停止生长条件:
1、当前节点包含的样本全部属于同类别;(例如:在相亲中,此次的样本,都是高的人)
2、当前属性集为空,或是所有样本在所有属性上取值相同,无法划分;(例如:相亲中,富的和不富的都见面)
3、当前节点包含的样本集合为空,不能划分。(例如:相亲中,没有帅的人)
决策树的三种算法
在解释三种算法之前,先解释一个概念——熵。
信息熵(entropy)是度量样本集合“纯度”的一种指标,也就是样本中混乱程度。假定当前样本集合D中的第k类样本所占集合的比例为P(k) ,则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
其中Ent(D)的值越小,则D的纯度越高。
约定P = 0 , Plog2§ = 0 。 Ent(D) 的最小值为 0 ,最大值为log2(|y|)。
ID3 --信息增益(information gain)
离散属性a的取值{a1,a2,a3,…,av}
Dv: D中在a上的取值 = av的样本集合
对属性进行信息熵计算,找到信息增益最大的那个属性(也就是使混乱度降低了的属性),作为节点。
以属性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)
D^v 为 D在属性ai上的集合
编号 | 色泽 | 根蒂 | 敲声 | 纹理 | 脐部 | 触感 | 好瓜 |
---|---|---|---|---|---|---|---|
1 | 青绿 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 乌黑 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 是 |
3 | 乌黑 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
4 | 青绿 | 蜷缩 | 沉闷 | 清晰 | 凹陷 | 硬滑 | 是 |
5 | 浅白 | 蜷缩 | 浊响 | 清晰 | 凹陷 | 硬滑 | 是 |
6 | 青绿 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 软粘 | 是 |
7 | 乌黑 | 稍蜷 | 浊响 | 稍糊 | 稍凹 | 软粘 | 是 |
8 | 乌黑 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 硬滑 | 是 |
9 | 乌黑 | 稍蜷 | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
10 | 青绿 | 硬挺 | 清脆 | 清晰 | 平坦 | 软粘 | 否 |
11 | 浅白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 否 |
12 | 浅白 | 蜷缩 | 浊响 | 模糊 | 平坦 | 软粘 | 否 |
13 | 青绿 | 稍蜷 | 浊响 | 稍糊 | 凹陷 | 硬滑 | 否 |
14 | 浅白 | 稍蜷 | 沉闷 | 稍糊 | 凹陷 | 硬滑 | 否 |
15 | 乌黑 | 稍蜷 | 浊响 | 清晰 | 稍凹 | 软粘 | 否 |
16 | 浅白 | 蜷缩 | 浊响 | 模糊 | 平坦 | 硬滑 | 否 |
17 | 青绿 | 蜷缩 | 沉闷 | 稍糊 | 稍凹 | 硬滑 | 否 |
$|y| = 2 $
E n t ( D ) = − ∑ k = 1 2 p k l o g 2 p k = − ( 8 17 l o g 2 8 17 + 9 17 l o g 2 9 17 ) = 0.998 Ent(D) = -\sum_{k=1}^2p_klog_2p_k = -(\frac{8}{17}log_2{\frac{8}{17}} + \frac{9}{17}log_2{\frac{9}{17}}) = 0.998 Ent(D)=−∑k=12pklog2pk=−(178log2178+179log2179)=0.998
- 以属性“色泽”为例,其对应3个子数据集,D1(青绿)=6,D2(乌黑)=6,D3(浅白)=5
E n t ( D 1 ) = − ( 3 6 l o g 2 3 6 + 3 6 l o g 2 3 6 ) = 1.000 Ent(D^1) = -(\frac{3}{6}log_2{\frac{3}{6}} + \frac{3}{6}log_2{\frac{3}{6}}) = 1.000 Ent(D1)=−(63log263+63log263)=1.000
E n t ( D 2 ) = − ( 4 6 l o g 2 4 6 + 2 6 l o g 2 2 6 ) = 0.918 Ent(D^2) = -(\frac{4}{6}log_2{\frac{4}{6}} + \frac{2}{6}log_2{\frac{2}{6}}) = 0.918 Ent(D2)=−(64log264+62log262)=0.918
E n t ( D 3 ) = − ( 1 5 l o g 2 1 5 + 4 5 l o g 2 4 5 ) = 0.722 Ent(D^3) = -(\frac{1}{5}log_2{\frac{1}{5}} + \frac{4}{5}log_2{\frac{4}{5}}) = 0.722 Ent(D3)=−(51log251+54log254)=0.722
G a i n ( D , s e z e ) = E n t ( D ) − ∑ v = 1 3 ∣ D v ∣ ∣ D ∣ E n t ( D v ) = 0.998 − ( 6 17 ∗ 1.000 + 6 17 ∗ 0.918 + 5 17 ∗ 0.722 ) = 0.109 Gain(D, seze) = Ent(D) - \sum_{v=1}^3\frac{|D^v|}{|D|}Ent(D^v) = 0.998 -(\frac{6}{17} * 1.000 + \frac{6}{17} * 0.918 + \frac{5}{17} * 0.722) = 0.109 Gain(D,seze)=Ent(D)−∑v=13∣D∣∣Dv∣Ent(Dv)=0.998−(176∗1.000+176∗0.918+175∗0.722)=0.109
同理可求出其他属性的信息增益:
Gain(D,色泽) = 0.109
Gain(D,根蒂) = 0.143
Gain(D,敲声) = 0.141
Gain(D,纹理) = 0.381
Gain(D,脐部) = 0.289
Gain(D,触感) = 0.006
可见,纹理的信息增益最大,使用纹理当做被划分属性
C4.5 --信息增益率(gain ratio)
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) =-\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)的值通常就越大。
启发:先从候选划分属性中找出信息增益高于平均水平的,再从中选取增益率最高的。
CART --基尼指数或者基尼不纯度(gini index)
CART是二叉树
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'\neq k}p_kp_{k'} = 1 - \sum_{k=1}^{|y|}p^2_k Gini(D)=∑k=1∣y∣∑k′̸=kpkpk′=1−∑k=1∣y∣pk2
反映了从D中随机抽取两个样例,其类别标记不一致的概率。
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)
在候选属性集合中,选取那个使划分后基尼指数最小的属性。也就是划分属性使得纯度提高。
回归树
- 递归二分
R 1 ( j , s ) = { x ∣ x j < s } R_1(j,s) = \{x|x_j < s\} R1(j,s)={x∣xj<s}
R 2 ( j , s ) = { x ∣ x j < s } R_2(j,s) = \{x|x_j < s\} R2(j,s)={x∣xj<s}
R S S = ∑ x i ∈ R 1 ( j , s ) ( y i − y ˉ R 1 ) 2 + ∑ x i ∈ R 2 ( j , s ) ( y i − y ˉ R 2 ) 2 RSS = \sum{}_{{x_i}\in{R}_1(j,s)}(y_i - \bar y_{R1})^2 + \sum{}_{{x_i}\in{R}_2(j,s)}(y_i - \bar y_{R2})^2 RSS=∑xi∈R1(j,s)(yi−yˉR1)2+∑xi∈R2(j,s)(yi−yˉR2)2
- 回归树剪枝
正则化项
∑ m = 1 ∣ T ∣ ∑ x i ∈ R m \sum_{m=1}^{|T|}\sum{}_{{x_i}\in{R_m}} ∑m=1∣T∣∑xi∈Rm
基尼指数 vs 熵 vs 分类错误率
- Gini ≈ Entropy
多棵树的类型
Bagging
Bootstraping
Random Forest