ID3.5
信息熵(entropy)
度量样本集合“不纯度”或者“混乱程度”的最常用指标,熵值越大,混乱程度越大,纯度越低;熵值越小,混乱程序越小,纯度越高;
E n t ( D ) = − ∑ k = 1 ∣ y ∣ p k l o g 2 p k Ent(D)= - {\sum_{k=1}^{|y|}}p_k{log_2^{p_k}} Ent(D)=−k=1∑∣y∣pklog2pk
其中D为样本集, ∣ y ∣ |y| ∣y∣为类别总数, k k k为当前类别号, p k p_k pk为 k k k类别在整个样本集中出现的概率。计算信息熵时约定:若 p = 0 , 则 p l o g 2 p = 0 p=0,则p {log{_2^p}}=0 p=0,则plog2p=0;
当样本集合中
k
k
k类样本出现的概率
p
k
p_k
pk相等时,熵值最大,最大值
l
o
g
2
∣
y
∣
{log_2^{|y|}}
log2∣y∣,即混乱程度最大,纯度最低;相反,当样本集合中全是一个类别,熵值最小,最小值为0,纯度最高,混乱程度最低。
信息增益
信息增益直接以信息熵为基础,计算以某个属性划分对信息熵造成的变化,即让信息熵增大或者减小了,当然我们要选一个让熵值下降最多的属性去做划分,做决策树的目的就是使树往熵值更小的方向走。
样本的离散属性
a
=
{
a
1
,
a
2
,
.
.
.
,
a
V
}
a=\{a^1,a^2,...,a^V\}
a={a1,a2,...,aV},如经典的西瓜集的“色泽”属性{青绿,乌黑,浅白}。
D
v
D^v
Dv:D在
a
a
a上取值为
a
v
a^v
av的样本集合,即D中属性为
a
v
a^v
av的样本集合,注意是个集合,如西瓜中色泽属性为乌黑的子集。
以属性
a
a
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 \cfrac{|D^v|}{|D|} Ent(D^v) Gain(D,a)=Ent(D)−v=1∑V∣D∣∣Dv∣Ent(Dv)
信息增益 G a i n ( D , a ) Gain(D, a) Gain(D,a)评判在 a a a属性上划分前后,信息熵能减少多少,即划分后纯度能提高多少
C4.5
信息增益率
ID3缺点就是选择的时候容易选择一些比较容易分纯净的属性,尤其在具有像ID值这样的属性,因为每个ID都对应一个标签,所以分的很纯净,ID3比较倾向找到这样的属性做分裂。
C4.5定义了信息增益率Gain_ratio()避免了这个缺点
G
a
i
n
_
r
a
t
i
o
(
D
,
a
)
=
G
a
i
n
(
D
,
a
)
I
V
(
D
,
a
)
Gain\_ratio(D, a) = \cfrac{Gain(D, a)}{IV(D, a)}
Gain_ratio(D,a)=IV(D,a)Gain(D,a)
I
V
(
D
,
a
)
=
∑
v
=
1
V
∣
D
v
∣
∣
D
∣
l
o
g
2
∣
D
v
∣
∣
D
∣
IV(D, a) = \sum_{v=1}^V \cfrac{|D^v|}{|D|} log_2^{\cfrac{|D^v|}{|D|}}
IV(D,a)=v=1∑V∣D∣∣Dv∣log2∣D∣∣Dv∣
属性a的类别越多(即V越大),则
I
V
(
D
,
a
)
IV(D, a)
IV(D,a)的值通常就越大。
其实可以看出上面
I
V
(
D
,
a
)
IV(D, a)
IV(D,a)公式和信息熵公式
E
n
t
(
D
)
Ent(D)
Ent(D)是一样的,集合里面越混乱,值越大,同时最大值为
l
o
g
2
∣
y
∣
log_2^{|y|}
log2∣y∣,在这里
∣
y
∣
=
∣
V
∣
|y| = |V|
∣y∣=∣V∣即属性a下面的类别,类别数越多分布越平均,
I
V
(
D
,
a
)
IV(D, a)
IV(D,a)值越大,使得
G
a
i
n
_
r
a
t
i
o
(
D
,
a
)
Gain\_ratio(D, a)
Gain_ratio(D,a)值越小。
启发式:先从候选划分属性中找出信息增益高于平均水平的,之后在从中选择信息增益率最高的作为下一个分裂的属性
C4.5与ID3.5很像,只是前者选择了信息增益率来作为属性选择的判定标准。
CART
基尼指数
基尼指数反应了从样本集D中有放回的随机抽取两个样例,其类别标记不一样的概率。Gini(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'\neq k} p_k p_{k'} = 1 - \sum_{k=1}^{|y|}{p_k}^2 Gini(D)=k=1∑∣y∣k′=k∑pkpk′=1−k=1∑∣y∣pk2
该公式很好的代表了摸两次球类别不同的概率,第一个等号后的式子表示两次摸球均不同的概率和,如三个小球,摸到12,13,21,23,31,32的概率之和;第二个等号后面的式子表示用总概率和1减去两次摸球都相同的概率,即1减去摸到11,22,33球的概率,二者相等。
显然,当集合D中的数据类别都相同时,两次摸到相同类别的球的概率就大, G i n i ( D ) Gini(D) Gini(D)就小,反之,当集合中类别很多且分布均匀时, G i n i ( D ) Gini(D) Gini(D)值就大。
我们对集合中的每一个属性 a a a都计算该属性下的基尼指数 G i n i _ i n d e x ( D , a ) Gini\_index(D,a) Gini_index(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|} \cfrac{|D^v|}{|D|} Gini(D^v) Gini_index(D,a)=v=1∑∣V∣∣D∣∣Dv∣Gini(Dv)
需要注意的是:CART是一个二叉树即无论a属性下有几个分支,都会化成二叉树计算对应的 G i n i _ i n d e x ( D , a ) Gini\_index(D,a) Gini_index(D,a),然后来评估优先分裂哪个属性,例如属性 a a a有三个类别A,B,C,CART对属性 a a a计算时,会将类别分成(A,非A(即BC)),(B,非B),(C,非C)来分别计算属性a的基尼系数,最终用最小的方案来建树。建树完成后就进行第二步了,即根据验证数据进行剪枝。详细参考这里
基尼指数与熵泰勒展开后的相似性
基尼指数:
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_k p_{k'} = 1 - \sum_{k=1}^{|y|}{p_k}^2
Gini(D)=k=1∑∣y∣k′=k∑pkpk′=1−k=1∑∣y∣pk2
熵:
E
n
t
(
D
)
=
−
∑
k
=
1
∣
y
∣
p
k
l
o
g
2
p
k
Ent(D)= - {\sum_{k=1}^{|y|}}p_k{log_2^{p_k}}
Ent(D)=−k=1∑∣y∣pklog2pk
将
l
o
g
2
log_2
log2约等于
l
n
ln
ln,熵公式等于
E
n
t
(
D
)
=
∑
k
=
1
∣
y
∣
−
p
k
l
n
p
k
Ent(D)= {\sum_{k=1}^{|y|}}- p_k{ln^{p_k}}
Ent(D)=∑k=1∣y∣−pklnpk
−
l
n
x
-lnx
−lnx在
x
=
1
x=1
x=1处泰勒展开约等于
1
−
x
1-x
1−x,代入上式可以得到:
E
n
t
(
D
)
=
∑
k
=
1
∣
y
∣
−
p
k
l
n
p
k
=
∑
k
=
1
∣
y
∣
p
k
(
1
−
p
k
)
=
∑
k
=
1
∣
y
∣
p
k
−
∑
k
=
1
∣
y
∣
p
k
2
=
1
−
∑
k
=
1
∣
y
∣
p
k
2
Ent(D)= {\sum_{k=1}^{|y|}}- p_k{ln^{p_k}} = {\sum_{k=1}^{|y|}} p_k(1-p_k) = {\sum_{k=1}^{|y|}} p_k - {\sum_{k=1}^{|y|}} {p_k}^2 = 1 -{\sum_{k=1}^{|y|}} {p_k}^2
Ent(D)=k=1∑∣y∣−pklnpk=k=1∑∣y∣pk(1−pk)=k=1∑∣y∣pk−k=1∑∣y∣pk2=1−k=1∑∣y∣pk2
到此,可以得到,基尼指数与熵值公式是非常接近的。