机器学习笔记之三: 熵
来源:互联网 发布:将软件添加到磁贴 编辑:程序博客网 时间:2024/05/21 17:49
熵的推导
已知随机变量
在这种编码规则下,记
编码长度
现在我们希望编码长度的期望最小,约束条件是代价总和为1:
这是一个有约束条件的最优化问题,可以用拉格朗日乘子法。构建拉格朗日函数
为简化我们用
拉格朗日函数取极值条件:
又有:
最终有:
所以,当事件
举个例子, Bob只能说4个单词”dog”, “cat”, “fish”, “bird”,概率分布为
现在我们需要跟Bob交流,必须先进行编码,如果采用固定长度的编码:
编码长度期望为
而采用最优编码,即概率为
编码长度期望为
编码长度期望的最小值,被称为entropy(熵),它是由随机变量的分布决定的,我们称分布
import mathdef H(p_seq): return sum(-p*math.log(p) for p in p_seq if p>0)/math.log(2)
H([0.25,0.25,0.25,0.25])
2.0
熵的理解
先看几个例子:
分布1只能取x1一个值,它的熵为0。分布2和分布3能取两个值,但分布3更平均,它的熵更大。分布2和分布4是两个不同的分布,但是分布的集中程度相同,他们的熵也相同。分布3和分布5都是均匀分布,但分布5取值范围更广,它的熵更大。
从以上例子可以看出,分布约集中,其熵越小。从这个意义上来说,熵代表着不确定性,不确定度越小,熵越小。熵的取值范围:
(对于连续变量的微分熵,其值可以小于0。)
为了加深对熵这个概念的理解,着重看一下 熵的定义式(6)。它是一个和式,和式的每一项是两个部分的乘积,第一部分是概率函数
下面来看一个更一般的式子:
其中
p(x)≥0 ∫+∞−∞p(x)dx=1
以及它的离散形式
其中
p(x)≥0 ∑xp(x)=1
这个式子很重要,将会在很多地方看到它的各种各样的形式,举例说明:
(1) 当
(2) 当
(3) 当
(4)物理学的例子,质心=
(5)另一个物理学的例子:
这里
(6)机器学习的例子,在EM算法的E-step中要用到以下的变换:
这里,
(7)当
交叉熵(cross entropy)
现在如果有另一个分布
在使用分布
这个长度称为
这里强调q相对于p是因为交叉熵不是对称的,即
def cross_entropy(p_seq, q_seq): return sum(-q* math.log(p) for (p,q) in zip(p_seq,q_seq) if p>0)/math.log(2)p_seq=[1/2,1/4,1/8,1/8]q_seq=[1/8,1/2,1/4,1/8]print('cross entropy of q with respect to p:',cross_entropy(p_seq,q_seq))print('cross entropy of p with respect to q:',cross_entropy(q_seq,p_seq))
cross entropy of q with respect to p: 2.25cross entropy of p with respect to q: 2.375
交叉熵本身并没有多大的意义,有意义的是交叉熵与熵的差,称为Kullback–Leibler距离(简称KL距离):
它的意义是分布q采用另一个分布p的最优编码与采用自身的最优编码比较,消息编码长度的差。它表征的是两个分布的差异。当两个分布相同时,KL距离为0,当两个分布的差异越大,KL距离越大。KL距离在机器学习中经常被当做损失函数来使用。
多变量的熵
先看一个例子:
X与Y的联合熵:
以上图为例把X,Y的组合看成一个随机变量,则它有四种值:raining & t-shirt, raning & coat, sunny & t-shirt, sunny & coat, 其概率分别为6%,19%, 56%, 19%,故
H([0.06,0.19,0.19,0.56])
1.6224272282706345
Y给定时X的条件熵:
注意 (13)式与(12)式的区别:
与
还可以从另一个角度看条件熵,X|Y=raining 和 X|Y=sunny 是随机变量,它们的熵可以算出来,然后对这两个熵求期望,得到:
推导过程如下:
把(13)式条件熵与交叉熵对比,可以看出条件熵是联合概率
X_prob=[0.62,0.38] # t-shirt, coatY_prob=[0.25,0.75] # raning, sunnyjoint_prob = [0.06,0.19,0.56,0.19] cond_prob_x_y = [0.25,0.75,0.75,0.25]cond_prob_y_x = [0.08,0.5,0.92,0.5]print('H(X) =',H(X_prob))print('H(Y) =',H(Y_prob))print('H(X,Y) =', H(joint_prob))print('H(X|Y) =',cross_entropy(cond_prob_x_y, joint_prob))print('H(Y|X) =',cross_entropy(cond_prob_y_x, joint_prob))
H(X) = 0.9580420222262997H(Y) = 0.8112781244591328H(X,Y) = 1.6224272282706347H(X|Y) = 0.8112781244591328H(Y|X) = 0.6659961422684021
条件熵和联合熵存在以下关系:
推导过程如下:
上面等式的意义是X,Y联合的信息等于Y中的信息加上X中除去Y的信息。
多变量熵的一个重要概念是交互信息(mutual information),它被定义为:
交互信息表示两个随机变量X,Y之间共享的信息,当X,Y相互独立时,交互信息为0, 当X,Y一一对应时,交互信息最大。
交互信息还可以表示为:
另一个概念是变动信息(variation information),它被定义为:
下面的图有助于理解这几个概念:
把式(13)KL距离定义式变换一下:
上式的意义是p的最优编码和q的最优编码在编码同一分布q的消息时编码长度的差。与式(14)对比可以看出,交互信息表示与假设X,Y相互独立(
交互信息在神经网络中有很多应用,如交互信息最大化原则(Infomax),参看Simon Haykin 《神经网络与机器学习》。
参考文献
[1] colah’s blog Visual Information Theory.
[2] Simon Haykin 《神经网络与机器学习》
- 机器学习笔记之三: 熵
- 机器学习基础(林軒田)笔记之三
- 机器学习笔记(三)之朴素贝叶斯
- 机器学习笔记三
- 《机器学习实战》学习笔记(三)之K-近邻算法
- 机器学习学习笔记之三:朴素贝叶斯
- 机器学习学习笔记之三:朴素贝叶斯
- 三、机器学习系统设计笔记之聚类
- 机器学习实战笔记之三(决策树)
- 机器学习笔记之代价函数(三)
- 机器学习笔记之(三)常用的求导公式
- 机器学习笔记(三)
- 斯坦福机器学习笔记三
- 机器学习系列笔记(三)
- 机器学习笔记最大熵之NER
- 机器学习笔记之什么是机器学习
- 机器学习--学习笔记(三)--神经网络
- 机器学习(三)--- spark学习笔记
- LeetCode 674.Longest Continuous Increasing Subsequence
- python将代码转换成网页
- java反射学习摘记
- 1.1初识Java
- Linux系统-常见的文件操作命令
- 机器学习笔记之三: 熵
- 使用Maven管理Mybatis项目之pom文件配置
- 使用Docker中的mysql
- IO流的使用
- dao层打jar包运行报错 ibatis.binding.BindingException
- Python变量与动态数据类型
- Servlet笔记
- 正则表达式
- Hbase总结,Hbase安装部署,Hbase shell命令