前言
熵在机器学习中用的非常普遍,但这个又难以理解,经常忘记,写一篇博客记录一下,也方便其他人学习了解。
什么是熵
一开始接触熵是大二的信息论,非常难的一门课,当时学的时候不知道这个东西有什么用,完全就不太想学,因为不知道干嘛,也不知道学了有什么用,但是现在很后悔,定义:熵也叫信息熵,可以表征随机变量分布的混乱程度,分布越混乱,则熵越大,简易的解释就是:在一个随机事件中,某个事件发生的不确定度越大,熵也就越大,事件发生的概率越小,不确定度越大,熵也越大。
熵在物理学上表征物质状态的参量之一,也是体系混乱程度的度量;熵存在的意义是度量信息量的多少,人们常常说信息很多,或者信息较少,但却很难说清楚信息到底有多少,熵就是一个度量的单位,你也可以把他与千克、毫米等单位相比较增加理解,千克是重量单位,毫米是长度度量单位,所以用熵来度量信息,单位是比特(bit)或纳特(nat)。其实熵还可以用来度量其他的很多内容,特别是在物理领域,但这里不加追述,可以参考博客。
熵的计算
熵是信息的度量,信息是事件的发生,我们可以通过如下公式来计算信息熵:
H
(
X
)
=
−
∑
i
n
p
(
x
i
)
log
2
p
(
x
i
)
H(X)=-\sum_{i}^{n}p(x_i)\log_{2}p(x_i)
H(X)=−i∑np(xi)log2p(xi)
这里其实有一点要说明,没有要求一定是取对数2,也可以取对数e作为底,可以参考统计学习方法中第60页的说明,从公式可以看出,信息熵
H
(
X
)
H(X)
H(X)是各项自信息的累加值,由于每一项都是整正数,故而随机变量取值个数越多,状态数也就越多,累加次数就越多,信息熵就越大,混乱程度就越大,纯度越小。越宽广的分布,熵就越大,在同样的定义域内,由于分布宽广性中脉冲分布 < 高斯分布 < 均匀分布,故而熵的关系为脉冲分布信息熵 < 高斯分布信息熵 < 均匀分布信息熵。
同样我们可以看到熵的计算只与事件概率有关,跟事件对应的值无关系,比如:抛硬币,硬币为正面概率是0.5,如果是正面,我得到7元,反面你得到5元钱,熵是不会考虑事件的取值。
- 公式约束了 0 log 0 = 0 0\log0=0 0log0=0,毕竟有些事情不会发生,但这种情况也不会被我们考虑,给个约束还是可以的。
- 同样熵也是聚焦在整个大数据集上的,或者说是统计意义上的,某不是某次实际的样本数据,而是当样本数据无限多个的时候,熵才有意义,就像抛硬币,抛无穷多次,总体的情况可以用熵来表示。
推广到多维随机变量的联合分布,其联合信息熵:
H
(
X
,
Y
)
=
−
∑
i
n
∑
j
m
p
(
x
i
,
y
j
)
log
2
p
(
x
i
,
y
j
)
H(X,Y)= -\sum_{i}^n \sum_{j}^mp(x_i,y_j)\log_2p(x_i,y_j)
H(X,Y)=−i∑nj∑mp(xi,yj)log2p(xi,yj)
信息熵也是有推导过程的,参考博客,了解推导过程。
条件熵
为S,什么要讲条件熵?这主要是为了讲解机器学习中的信息增益的概念,条件熵的定义为:在X给定条件下,Y的条件概率分布的熵对X的数学期望。有点抽象,看具体公式就比较容易理解了:
H
(
Y
∣
X
)
=
H
(
X
,
Y
)
−
H
(
X
)
H(Y|X)=H(X,Y)-H(X)
H(Y∣X)=H(X,Y)−H(X)
同理可以知道:
H
(
X
∣
Y
)
=
H
(
X
,
Y
)
−
H
(
Y
)
H(X|Y)=H(X,Y)-H(Y)
H(X∣Y)=H(X,Y)−H(Y)
信息增益
信息增益(Information Gain):熵A-条件熵B,是信息量的差值,表示此条件对于信息熵减少的程度。也就是说,一开始是A状态,用了条件后变成了B状态,则条件引起的变化是A-B,即信息增益(它描述的是变化Delta),统计学习方法中有一段解释:信息增益表示得知特征X的信息而使得类Y的信息的不确定性减少的程度
,拿多特征分类来说,在某个特征下,原始信息熵减去已知该特征下的条件熵,这样就知道选取这个特征之后的信息增益,在决策树中我们选取信息增益最大的特征作为决策用的特征。我们看下信息增益的公式:
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
g(D,A)=H(D)-H(D|A)
g(D,A)=H(D)−H(D∣A)
其中A就是一个特征,D是原始的数据集,
D
∣
A
D|A
D∣A是在A分类下的数据集,两个数据集的信息熵相减就是信息增益,可能有人问了,那么这两个信息熵有什么区别,已知一个条件之后混乱程度就减少很多,信息熵自然是减少的,可以拿一个例子来分析:
编号 | 身高 | 颜值 | 喜欢喝酒程度 | 是否渣男 |
---|---|---|---|---|
1 | 中 | 1 | 3 | 否 |
2 | 低 | 2 | 1 | 否 |
3 | 低 | 3 | 3 | 是 |
4 | 高 | 2 | 3 | 否 |
5 | 高 | 1 | 2 | 否 |
身高、颜值、喝酒都是特征,是否渣男是分类结果,我们来算,已知A事件为身高情况下的信息增益:
H
(
D
)
=
−
(
4
5
log
2
4
5
)
−
(
1
5
log
2
1
5
)
=
0.72187
H
(
D
∣
A
)
=
−
2
5
(
1
2
log
(
1
2
)
+
1
2
log
(
1
2
)
)
−
1
5
(
1
log
1
)
−
2
5
(
1
log
1
+
0
)
=
0.4
g
(
D
,
A
)
=
H
(
D
)
−
H
(
D
∣
A
)
=
0.32187
\begin{aligned} H(D)&=-(\frac{4}{5}\log_2{\frac{4}{5}})-(\frac{1}{5}\log_2{\frac{1}{5}}) \\ &=0.72187 \\ H(D|A)&=-\frac{2}{5}(\frac{1}{2}\log(\frac{1}{2})+\frac{1}{2}\log(\frac{1}{2}))-\frac{1}{5}(1\log1)-\frac{2}{5}(1\log1+0) \\ &=0.4\\ g(D,A)&=H(D)-H(D|A)=0.32187 \end{aligned}
H(D)H(D∣A)g(D,A)=−(54log254)−(51log251)=0.72187=−52(21log(21)+21log(21))−51(1log1)−52(1log1+0)=0.4=H(D)−H(D∣A)=0.32187
求解H(D|A)的时候也要考虑条件概率,已知该条件下的分类结果的信息熵,例如其中
2
/
5
2/5
2/5就是身高为低的概率,在身高为低的样本中有一个样本是渣男,另一个样本不会渣男,由此来计算条件熵,详细可以参考统计学习基础的62页,有公式图表。
好的条件就是信息增益越大越好,即变化完后熵越小越好(熵代表混乱程度,最大程度地减小了混乱)。因此我们在树分叉的时候,应优先使用信息增益最大的属性,这样降低了复杂度,也简化了后边的逻辑
参考博客
统计学习方法 - - 第60页
机器学习入门:重要的概念—信息熵(Shannon’s Entropy Model)
机器学习各种熵:从入门到全面掌握