决策树
决策树是一种树形结构,每个叶节点代表一种类别。采用自顶向下的递归方法构建。基本思想是以信息熵为度量,构造一棵熵值下降最快的树。叶节点的熵值为0.。
信息量
设随机变量 x 的分布为 P(x),则定义 x 信息量为: I ( x ) = − log 2 P ( x ) I(x) = -\log_2P(x) I(x)=−log2P(x)
x 和 y 同时发生的信息量为: I ( x , y ) = I ( x ) + I ( y ) I(x, y) = I(x) + I(y) I(x,y)=I(x)+I(y)
事件发生的概率越小,包含的信息量越大,反之越小
熵
熵代表平均信息量,表示随机变量的不确定性。定义如下:
H ( X ) = − ∑ x ∈ X p ( x ) l o g 2 P ( x ) H(X) = -\sum_{x \in X} p(x)log_2P(x) H(X)=−x∈X∑p(x)log2P(x)
P ( x i ) P(x_i) P(xi) 代表随机事件 X 为 x i x_i xi 的概率。
条件熵
在一个条件下,随机变量的不确定性。
H(y|x) 表示在事件 x 发生的前提下 y 的熵。
H ( Y ∣ X ) = ∑ x ∈ X p ( x ) H ( Y ∣ X = x ) = − ∑ x ∈ X p ( x ) ∑ y ∈ Y p ( y ∣ x ) l o g p ( y ∣ x ) − ∑ x ∈ X ∑ y ∈ Y p ( x , y ) l o g p ( y ∣ x ) H(Y|X) = \sum_{x \in X} p(x)H(Y|X = x) \\ = -\sum_{x \in X}p(x)\sum_{y \in Y} p(y|x)logp(y|x) \\ -\sum_{x \in X} \sum_{y \in Y} p(x, y)logp(y|x) H(Y∣X)=x∈X∑p(x)H(Y∣X=x)=−x∈X∑p(x)y∈Y∑p(y∣x)logp(y∣x)−x∈X∑y∈Y∑p(x,y)logp(y∣x)
信息增益
信息增益 = 熵 - 条件熵
即信息增益代表了在一个条件下,信息不确定性减少的程度。
可参考知乎上的解释:信息增益到底怎么理解呢
ID3 决策树
算法:
grow(D):
取信息量最大的属性at
将 D 划分为若干个子集 Di
对每个子集 Di:
if Di 中所有样本属于同一个类别:
创建一个类标记的叶节点
else:
grow(Di)
令 D 为训练集, |D| 为训练集中的样本数;
D i D_i Di 是用属性 at 划分D后的子集, ∣ D i ∣ |D_i| ∣Di∣ 为 D i D_i Di 中的样本数。
D i k D_{ik} Dik 为 D i D_i Di 中类别为 C k C_k Ck 的样本集合,样本数 为 ∣ D i k ∣ |D_{ik}| ∣Dik∣。
由相对频率估算得到的熵和条件熵称为经验熵和经验条件熵。
设有 K 个类 C k C_k Ck, ∣ C k ∣ |C_k| ∣Ck∣ 表示类 C k C_k Ck 的样本数,那么: ∑ ∣ C k ∣ = ∣ D ∣ \sum |C_k| = |D| ∑∣Ck∣=∣D∣
经验熵为: H ( D ) = − ∑ k = 1 K p k l o g 2 P k = − ∑ k = 1 K ∣ C k ∣ ∣ D ∣ l o g 2 ∣ C k ∣ ∣ D ∣ H(D) = -\sum_{k=1}^Kp_k log_2P_k = -\sum_{k=1}^K \frac{|C_k|}{|D|}log_2\frac{|C_k|}{|D|} H(D)=−∑k=1Kpklog2Pk=−∑k=1K∣D∣∣Ck∣log2∣D∣∣Ck∣
属性 at 对训练集 D 的经验条件熵为:
H
(
D
∣
a
t
)
=
∑
i
=
1
n
p
i
H
(
D
i
)
=
−
∑
i
=
1
n
∣
D
i
∣
∣
D
∣
∑
k
=
1
K
∣
D
i
k
∣
∣
D
i
∣
l
o
g
2
∣
D
i
k
∣
∣
D
i
∣
H(D|at) = \sum_{i=1}^n p_i H(D_i) = -\sum_{i = 1}^n\frac{|D_i|}{|D|}\sum_{k=1}^K\frac{|D_{ik}|}{|D_i|}log_2\frac{|D_{ik}|}{|D_i|}
H(D∣at)=∑i=1npiH(Di)=−∑i=1n∣D∣∣Di∣∑k=1K∣Di∣∣Dik∣log2∣Di∣∣Dik∣
经验条件熵的解释:数据 at 根据不同的属性值将数据集 D 划分为 n 个子集,对每个子集求它们的经验熵,再对它们加权求和,权重即为每个子集所占的比例。
信息增益:G(D, at) = H(D) - H(D|at)
信息增益越大,事件发生的确定性越大。每次划分应选择信息增益最大的属性。
C4.5 决策树
信息增益的缺点:信息增益准则倾向于选择那些有更多可能取值的属性(属性的取值范围大),因为这样会有更多的分支,叶节点包含的样本数更少,纯度更高。但这样会使得泛化能力不高,因为有更多分支不代表就是最好的分类结果。
所以 C4.5 决策树使用 “增益率” 来选择最优化分属性。
信息增益率的定义为:
G
r
(
D
,
a
t
)
=
G
(
D
,
a
t
)
I
V
(
a
t
)
G_r(D, at) = \frac{G(D, at)}{IV(at)}
Gr(D,at)=IV(at)G(D,at)
其中 IV(at) 称为属性 at 的 ”固有值“。
I
V
(
a
t
)
=
−
∑
i
=
1
n
D
i
D
l
o
g
∣
D
i
∣
∣
D
∣
IV(at) = -\sum_{i=1}^n\frac{D_i}{D}log\frac{|D_i|}{|D|}
IV(at)=−i=1∑nDDilog∣D∣∣Di∣
D
i
D_i
Di 是用属性 at 划分D后的子集,
∣
D
i
|D_i
∣Di 为
D
i
D_i
Di 中的样本数。
属性 at 的可能取值数目越多 (n 越大),则 IV(a) 的值越大。由此可以看出 IV(at) 对可取值数目较小的属性有所偏好(与信息增益相反)。但 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) = \sum_{k=1}^{|y|}\sum_{k'\neq k}p_kp_k' = 1 - \sum_{k=1}^{|y|}p_k^2 Gini(D)=k=1∑∣y∣k′̸=k∑pkpk′=1−k=1∑∣y∣pk2
Gini(D) 反映了从数据集 D 中随机抽取两个样本,其类别标志不一致的概率 。
Gini(D) 越小,则数据集 D 的纯度越高,希望纯度越高越好。
属性 a 的基尼指数定义为:
G i n i _ i n d e x ( D , a t ) = ∑ i = 1 V ∣ D i ∣ ∣ D ∣ G i n i ( D i ) Gini\_index(D, at) = \sum_{i = 1}^V\frac{|D^i|}{|D|}Gini(D^i) Gini_index(D,at)=i=1∑V∣D∣∣Di∣Gini(Di)
D
i
D_i
Di 是用属性 at 划分D后的子集,
∣
D
i
∣
|D_i|
∣Di∣ 为
D
i
D_i
Di 中的样本数。
选择划分数据集 D 后的每个子数据集纯度最高的属性。
该公式的含义:属性 a 会将数据集 D 划分为几个子数据集
D
i
D_i
Di,每个子数据集都有一个基尼指数,将这些基尼指数加权求和,权重为子数据集所占的比例。
回归: 使用平方误差划分二叉树,划分时,要找到某个特征变量和该变量中的某个值使划分最优化。
最终得到 n 个划分空间,每个空间对应一个输出值,该输出值等于该空间中所有变量的输出值的平均值。假设 每个空间
R
m
R_m
Rm 的输出值为
c
m
c_m
cm, 一共有 M 个输出空间,则回归树模型可表示为:
f
(
x
)
=
∑
m
=
1
M
c
m
I
(
x
∈
R
m
)
f(x) = \sum_{m=1}^Mc_mI(x\in R_m)
f(x)=m=1∑McmI(x∈Rm)
参考:
周志华 《机器学习》
李航 《统计学习方法》