写在前面的话:机器学习中,很多地方都会用到条件熵(例如:决策树里面的信息增益与信息增益比的计算;最大熵模型等),但是很多教材或者博客中都只是直接给出了条件熵的计算公式,并没有讲清楚它是怎么来的,这很容易让大家(尤其是我,哈哈哈)知其然不知其所以然,云里雾里的。因此,我看了一下资料,包括《数学之美》以及一些博客,算是弄明白了一点,同时我觉得有必要写出来让更多跟我一样存在过疑惑的人能看到并且解除疑惑。
1. 熵是什么?
在通俗的介绍中,熵一般有两种解释:(1)熵是不确定性的度量;(2)熵是信息的度量。
看上去说的不是一回事,其实它们说的就是同一个意思。
首先,熵是不确定性的度量,它衡量着我们对某个事物的“无知程度”。
熵为什么又是信息的度量呢?既然熵代表了我们对事物的无知,那么当我们从“无知”到“完全认识”这个过程中,就会获得一定的信息量,我们开始越无知,那么到达“完全认识”时,获得的信息量就越大,因此,作为不确定性的度量的熵,也可以看作是信息的度量,说准确点,是我们能从中获得的最大的信息量。
【打个比方】
【一个身无分文的人和一个身有50万的人同时开始创业,他们都在一个月的时间里赚到身怀100万。很显然,这种情况下,前者赚100万的不确定性比后者赚100万的不确定性更大,所以前者的熵越大】
如何去衡量不确定性?也就是说,如何计算熵?
要回答这个问题,我们可以想到,我们是用概率来描述不确定性的,我们可以给出系统出现某种状态的概率(或者概率密度,这里不作区分),只要概率不为1,就意味着出现不确定性。因此,熵必定与概率分布有关。具体怎么计算熵呢?本来,按照一般教科书或者科普的做法,是直接给出熵的公式(如下式(1)),而这里,我想尝试着从通俗和抽象这两个角度给出熵的公式的来源,希望能帮助大家更好的理解。
(1) H ( P ( x ) ) = − ∑ x p ( x ) l o g p ( x ) H(P(x))=−∑_xp(x)log p(x) \tag1 H(P(x))=−x∑p(x)logp(x)(1)
2. 从通俗的角度理解熵
从下面的例子出发:
世界杯结束后,大家都很关心谁会是冠军。假如我错过了看世界杯,赛后我问一个知道比赛结果的观众“哪支球队是冠军”?他不愿意直接告诉我,而要让我猜,并且我每猜一次,他要收一元钱才肯告诉我是否猜对了,那么我需要付给他多少钱才能知道谁是冠军呢?我可以把球队编上号,从1到32,然后提问:“冠军的球队在1-16号中吗?”假如他告诉我猜对了,我会接着问:“冠军在1-8号中吗?”假如他告诉我猜错了,我自然知道冠军队在9-16中。这样只需要5次,我就能知道哪支球队是冠军。所以,谁是世界杯冠军这条消息的信息量只值5块钱。
以上例子引自吴军老师的著作《数学之美》中的“谈谈最大熵模型”这一章。以上例子成立的前提是:“我”对足球一无所知——“我”既没有研究足球,也没有听说过任何关于足球的消息。在这种情况下,我只能靠猜,最朴素的方法就是一支支队伍地猜:是中国吗?是巴西吗?是日本吗?…这样我们有可能问到第31个问题才得到最终结果。显然,这不是最高效率的方法。在例子中,我们先对球队编号(在数据处理时,我们称之为建立“索引”),然后用二分法查找,效率是 O ( l o g 2 N ) O(log_2N) O(log2N)。
这给我们两个启示:1)建立索引,并通过二分法,能够大大加快查找的速度,不过这跟本文没多大关系;2) l o g 2 N log_2N log2N出现了(对数形式)!它可以改写为:
l o g 2 N = − l o g 2 1 N = − ∑ N 支 队 伍 1 N l o g 2 1 N log_2N=−log_2 \frac{1}{N}=−∑_{N支队伍} \frac{1}{N}log_2 \frac{1}{N} log2N=−log2N1=−N支队伍∑N1log2N1
这正好是式(1)的形式,这里因为我们对足球一无所知,所以每支队伍得冠军的概率都是一样的,也就是 p = 1 N p=\frac{1}{N} p=N1。
看到这里,读者可能会觉得这个例子太特殊,结果没什么代表性。确实,这只不过是一个感性的认知。从更抽象的、更精准的数学角度来理解也是可以的,这时候,我们的思路是反过来的。
3. 从抽象的角度理解熵
首先,我们希望构造出一个公式来表示信息量,或者等价地,不确定的程度,叫做“熵”(注意,这里是我们希望根据我们所想的用途去构造一个量,而不是我们已经得到了这个量,然后才证明它有这样的用途。这里边的逻辑刚好是反过来的,是我们需要什么,我们就去构造什么。)。既然“熵”用来表示信息量,那么它应该具有下面的简单的性质:
- 它是概率分布 p ( x ) p(x) p(x)的函数,为了研究的方便,我们还希望它是一个光滑函数 f f f;
- 它具有可加性,这意味着熵具有形式:
(2) H [ p ( x ) ] = ∑ x f ( p ( x ) ) H[p(x)]=∑xf(p(x)) \tag2 H[p(x)]=∑xf(p(x))(2)
现在的问题是, f ( ) f() f()的具体形式是什么?
我们需要一些额外的信息来确定它,比如,假如 X , Y X,Y X,Y是两个独立的随机变量,它们的概率分布分别是 p ( x ) p(x) p(x)和 p ( y ) p(y) p(y),那么 X , Y X,Y X,Y的联合概率是 p ( x ) p ( y ) p(x)p(y) p(x)p(y)。因为两个随机变量是独立的,那么它们的联合分布 p ( x ) p ( y ) p(x)p(y) p(x)p(y)和单独的两个分布 p ( x ) , p ( y ) p(x),p(y) p(x),p(y),所具有的信息量是等价的(从联合密度分布可以算得单个的密度分布,从单个的密度分布,可以算得联合密度分布),也就是:
- 当X,Y是独立随机变量时,有:
(3) H [ p ( x ) p ( y ) ] = H [ p ( x ) ] + H [ p ( y ) ] H[p(x)p(y)]=H[p(x)]+H[p(y)] \tag3 H[p(x)p(y)]=H[p(x)]+H[p(y)](3)
事实上,根据上面的熵应该具有的3个性质(约束),就可以确定熵的表达式了。为了从式(3)确定 f ( ) f() f()的形式,我们只需要从最简单的二元分布出发,假设 X , Y X,Y X,Y都是二元随机变量, X X X的概率分布为 p , 1 − p p,1−p p,1−p, Y Y Y的概率分布为 q , 1 − q q,1−q q,1−q,那么联合分布为 p q , p ( 1 − q ) , ( 1 − p ) q , ( 1 − p ) ( 1 − q ) pq,p(1−q),(1−p)q,(1−p)(1−q) pq,p(1−q),(1−p)q,(1−p)(1−q),根据式(3),就有:
式(3)左边可以写成: f ( p q ) + f ( p ( 1 − q ) ) + f ( ( 1 − p ) q ) + f ( ( 1 − p ) ( 1 − q ) ) f(pq)+f(p(1−q))+f((1−p)q)+f((1−p)(1−q)) f(pq)+f(p(1−q))+f((1−p)q)+f((1−p)(1−q))
式(3)右边可以写成: f ( p ) + f ( 1 − p ) + f ( q ) + f ( 1 − q ) f(p)+f(1−p)+f(q)+f(1−q) f(p)+f(1−p)+f(q)+f(1−q)
左边等于右边,则有:
(4) f ( p q ) + f ( p ( 1 − q ) ) + f ( ( 1 − p ) q ) + f ( ( 1 − p ) ( 1 − q ) ) = f ( p ) + f ( 1 − p ) + f ( q ) + f ( 1 − q ) f(pq)+f(p(1−q))+f((1−p)q)+f((1−p)(1−q)) = f(p)+f(1−p)+f(q)+f(1−q) \tag4 f(pq)+f(p(1−q))+f((1−p)q)+f((1−p)(1−q))=f(p)+f(1−p)+f(q)+f(1−q)(4)
这是关于 f ( ) f() f()的一个函数方程,只要加上适当的合理的限制,那么它就具有唯一解。这里我们尝试求解它,但不去证明解的唯一性。求解的过程是试探性的,我们发现,左边是自变量的积的形式,如 p q pq pq,右边是单个的自变量的形式,如 p p p,回想数学中的概念,我们可以想起来,能够把乘积变为求和的运算是取对数,所以我们不妨设 f ( x ) = h ( x ) l n x f(x)=h(x)lnx f(x)=h(x)lnx,将其带入式(4)的中可以得到:
左边为: h ( p q ) l n p + h ( p q ) l n q + h ( p ( 1 − q ) ) l n p + h ( p ( 1 − q ) ) l n ( 1 − q ) + h ( ( 1 − p ) q ) l n ( 1 − p ) + h ( ( 1 − p ) q ) l n q + h ( ( 1 − p ) ( 1 − q ) ) l n ( 1 − p ) + h ( ( 1 − p ) ( 1 − q ) ) l n ( 1 − q ) h(pq)lnp+h(pq)lnq+h(p(1−q))lnp+h(p(1−q))ln(1−q)+h((1−p)q)ln(1−p)+h((1−p)q)lnq+h((1−p)(1−q))ln(1−p)+h((1−p)(1−q))ln(1−q) h(pq)lnp+h(pq)lnq+h(p(1−q))lnp+h(p(1−q))ln(1−q)+h((1−p)q)ln(1−p)+h((1−p)q)lnq+h((1−p)(1−q))ln(1−p)+h((1−p)(1−q))ln(1−q)
右边为: h ( p ) l n p + h ( 1 − p ) l n ( 1 − p ) + h ( q ) l n q + h ( 1 − q ) l n ( 1 − q ) h(p)lnp+h(1−p)ln(1−p)+h(q)lnq+h(1−q)ln(1−q) h(p)lnp+h(1−p)ln(1−p)+h(q)lnq+h(1−q)ln(1−q)
左边=右边,有:
(5) h ( p q ) l n p + h ( p q ) l n q + h ( p ( 1 − q ) ) l n p + h ( p ( 1 − q ) ) l n ( 1 − q ) + h ( ( 1 − p ) q ) l n ( 1 − p ) + h ( ( 1 − p ) q ) l n q + h ( ( 1 − p ) ( 1 − q ) ) l n ( 1 − p ) + h ( ( 1 − p ) ( 1 − q ) ) l n ( 1 − q ) = h ( p ) l n p + h ( 1 − p ) l n ( 1 − p ) + h ( q ) l n q + h ( 1 − q ) l n ( 1 − q ) h(pq)lnp+h(pq)lnq+h(p(1−q))lnp+h(p(1−q))ln(1−q) +h((1−p)q)ln(1−p)\\+h((1−p)q)lnq+h((1−p)(1−q))ln(1−p)+h((1−p)(1−q))ln(1−q)\\ = h(p)lnp+h(1−p)ln(1−p)+h(q)lnq+h(1−q)ln(1−q) \tag5 h(pq)lnp+h(pq)lnq+h(p(1−q))lnp+h(p(1−q))ln(1−q)+h((1−p)q)ln(1−p)+h((1−p)q)lnq+h((1−p)(1−q))ln(1−p)+h((1−p)(1−q))ln(1−q)=h(p)lnp+h(1−p)ln(1−p)+h(q)lnq+h(1−q)ln(1−q)(5)
再将式(5)相同的对数项合并起来,可以推出:
对于
l
n
p
lnp
lnp项有:
[
h
(
p
)
−
h
(
p
q
)
−
h
(
p
(
1
−
q
)
)
]
l
n
p
[h(p)−h(pq)−h(p(1−q))]lnp
[h(p)−h(pq)−h(p(1−q))]lnp
剩余三项的推法类似。我们发现,如果
h
(
)
h()
h()取线性函数,那么上式刚好是0,剩余三项也同类为0,等式自动满足!所以,我们就找到了一个解:
(6)
f
(
x
)
=
α
x
l
o
g
x
f(x)=αxlogx \tag6
f(x)=αxlogx(6)
将式(6)带入式(2)中,就得到了熵的表达式:
(7)
H
[
p
(
x
)
]
=
∑
x
α
p
(
x
)
l
o
g
p
(
x
)
H[p(x)]=∑xαp(x)logp(x) \tag7
H[p(x)]=∑xαp(x)logp(x)(7)
最后,还要确定 α α α,当然, α α α本身的值不重要,它只不过是信息的单位而已,但是 α α α的符号是很重要的。我们要求熵有下面的性质:
- 信息量越大,熵越大
第4点是为了符合我们的习惯而已,如果你喜欢,你也可以定义“信息量越大,熵越小”。
按照4的定义,我们就知道,确定性事件的熵肯定比不确定的事件的熵要小(不确定的事情蕴含的信息越大),确定性事件的概率分布也就是恒等于1,对应的熵是0,而不确定性事件,我们还是取二元分布,概率分布为 p , 1 − p p,1−p p,1−p,那么必然有
(8) α p l o g p + α ( 1 − p ) l o g ( 1 − p ) > 0 αplogp+α(1−p)log(1−p)>0 \tag8 αplogp+α(1−p)log(1−p)>0(8)
因此只有 α < 0 α<0 α<0。
再令 α = − 1 α=-1 α=−1,就得到了熵的计算公式,即式(1)。
至此,我们已经推出了熵的计算公式的来源,接下来,就是推条件熵公式的来源了。
4. 条件熵公式的来源
在讲条件熵公式之前我想先讲一下联合熵。
顾名思义,联合熵就是联合概率函数的熵(哈哈哈),因此,只需将联合概率带入式(1)中就能得到:
(9) H [ p ( x , y ) ] = − ∑ x ∑ y p ( x , y ) l o g p ( x , y ) H[p(x,y)]=−∑_x∑_yp(x,y)logp(x,y) \tag9 H[p(x,y)]=−x∑y∑p(x,y)logp(x,y)(9)
回顾一下联合概率的计算公式:
(10)
p
(
x
,
y
)
=
p
(
x
)
p
(
y
∣
x
)
p(x,y) = p(x)p(y|x) \tag{10}
p(x,y)=p(x)p(y∣x)(10)
从式(10)中不难发现:条件概率 p ( y ∣ x ) = p ( x , y ) p ( x ) p(y|x)=\frac{p(x,y)}{p(x)} p(y∣x)=p(x)p(x,y),由于在熵的计算公式使用到了对数函数(对数函数的性质: l n a b = l n a − l n b ln \frac{a}{b} = ln a-ln b lnba=lna−lnb),从而可以推出条件熵公式为:
(11) H [ p ( y ∣ x ) ] = H [ p ( x , y ) ] − H [ p ( x ) ] H[p(y|x)] = H[p(x,y)]-H[p(x)] \tag{11} H[p(y∣x)]=H[p(x,y)]−H[p(x)](11)
将式(11)右边展开,有:
H
[
p
(
x
,
y
)
]
−
H
[
p
(
x
)
]
=
−
∑
x
∑
y
p
(
x
,
y
)
l
o
g
p
(
x
,
y
)
−
(
−
∑
x
p
(
x
)
l
o
g
p
(
x
)
)
=
−
∑
x
p
(
x
)
[
∑
y
p
(
y
∣
x
)
l
o
g
p
(
x
)
p
(
y
∣
x
)
]
+
∑
x
p
(
x
)
l
o
g
p
(
x
)
=
−
∑
x
p
(
x
)
[
∑
y
p
(
y
∣
x
)
l
o
g
p
(
x
)
p
(
y
∣
x
)
−
l
o
g
p
(
x
)
]
=
−
∑
x
p
(
x
)
[
∑
y
p
(
y
∣
x
)
l
o
g
p
(
x
)
+
∑
y
p
(
y
∣
x
)
l
o
g
p
(
y
∣
x
)
−
l
o
g
p
(
x
)
]
=
−
∑
x
p
(
x
)
[
[
l
o
g
p
(
x
)
(
∑
y
p
(
y
∣
x
)
−
1
)
]
+
∑
y
p
(
y
∣
x
)
l
o
g
p
(
y
∣
x
)
]
=
−
∑
x
p
(
x
)
[
0
+
∑
y
p
(
y
∣
x
)
l
o
g
p
(
y
∣
x
)
]
=
−
∑
x
p
(
x
)
∑
y
p
(
y
∣
x
)
l
o
g
p
(
y
∣
x
)
=
H
[
p
(
y
∣
x
)
]
H[p(x,y)]-H[p(x)] \\= −∑_x∑_yp(x,y)logp(x,y)-(−∑_xp(x)log p(x)) \\=-\sum_x p(x)[\sum_y p(y|x)logp(x)p(y|x)] +\sum_x p(x)logp(x) \\=-\sum_x p(x)[\sum_y p(y|x)logp(x)p(y|x)-logp(x)] \\=-\sum_x p(x)[\sum_y p(y|x)logp(x)+\sum_y p(y|x)logp(y|x)-logp(x)] \\=-\sum_x p(x)[[logp(x)(\sum_y p(y|x)-1)]+\sum_yp(y|x)logp(y|x)] \\=-\sum_x p(x)[0+\sum_yp(y|x)logp(y|x)] \\=-\sum_x p(x)\sum_yp(y|x)logp(y|x) \\=H[p(y|x)]
H[p(x,y)]−H[p(x)]=−∑x∑yp(x,y)logp(x,y)−(−∑xp(x)logp(x))=−∑xp(x)[∑yp(y∣x)logp(x)p(y∣x)]+∑xp(x)logp(x)=−∑xp(x)[∑yp(y∣x)logp(x)p(y∣x)−logp(x)]=−∑xp(x)[∑yp(y∣x)logp(x)+∑yp(y∣x)logp(y∣x)−logp(x)]=−∑xp(x)[[logp(x)(∑yp(y∣x)−1)]+∑yp(y∣x)logp(y∣x)]=−∑xp(x)[0+∑yp(y∣x)logp(y∣x)]=−∑xp(x)∑yp(y∣x)logp(y∣x)=H[p(y∣x)]
上面的推导过程看起来很麻烦,实际上自己没有那么麻烦,有耐心的小朋友建议自己试着推一下。
换个角度看式(11):条件分布就是在联合分布 p ( x , y ) p(x,y) p(x,y)的基础上,已经知道 p ( x ) p(x) p(x)的分布,求 X X X确定时, Y Y Y的分布情况。那么条件熵自然是在联合熵的基础上引入 X X X的熵后所剩下的熵。(哈哈哈,想想是不是觉得很有道理的样子啊)
也即是说,条件熵表示的是在已知随机变量 X X X的条件下随机变量 Y Y Y的不确定性。
谢谢你能看到这里,你是一个很能坚持一件事情的人呢^^
5. 友情提示
当你看完这篇博客的时候,再联系一下最大熵模型(用到了条件熵)以及决策树ID3(信息增益(不确定性减少的程度),即熵与条件熵的差值)和C4.5(信息增益比)中用到的熵的知识,相信你会收获更多东西^^