为什么信息熵要定义成-Σp*log(p)?
From https://www.zhihu.com/question/30828247
链接:https://www.zhihu.com/question/30828247/answer/64816509
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
我从一个非常直观的角度来解释一下熵的定义为什么如题主所示。
第一,假设存在一个随机变量,可以问一下自己当我们观测到该随机变量的一个样本时,我们可以接受到多少信息量呢?毫无疑问,当我们被告知一个极不可能发生的事情发生了,那我们就接收到了更多的信息;而当我们观测到一个非常常见的事情发生了,那么我们就接收到了相对较少的信息量。因此信息的量度应该依赖于概率分布
,所以说熵
的定义应该是概率的单调函数。
第二,假设两个随机变量和
是相互独立的,那么分别观测两个变量得到的信息量应该和同时观测两个变量的信息量是相同的,即:
。而从概率上来讲,两个独立随机变量就意味着
,所以此处可以得出结论熵的定义
应该是概率
的
函数。因此一个随机变量的熵可以使用如下定义:
此处的负号仅仅是用来保证熵(即信息量)是正数或者为零。而函数基的选择是任意的(信息论中基常常选择为2,因此信息的单位为比特bits;而机器学习中基常常选择为自然常数,因此单位常常被称为nats)。
最后,我们用熵来评价整个随机变量平均的信息量,而平均最好的量度就是随机变量的期望,即熵的定义如下:
总的来说,题主给出的定义符合第一点(单调性),但是不符合第二点。
以上内容参考自Bishop 的著作《Pattern Recognition and Machine Learning》
链接:https://www.zhihu.com/question/30828247/answer/168054140
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
刚好看《数学之美》中有一个非常直观的例子:
假设我们没有看世界杯的比赛,但是想知道哪支球队会是冠军,只能去问已经看过比赛的观众,但是我们只能猜测某支球队是或不是冠军,然后观众用对或不对来回答,我们想要猜测次数尽可能少,所用的方法就是二分法。假如有 16 支球队,分别编号,先问是否在 1-8 之间,如果是就继续问是否在 1-4 之间,以此类推,直到最后判断出冠军球队是哪只。如果球队数量是 16,我们需要问 4 次来得到最后的答案。那么世界冠军这条消息的信息量就是 4。在计算机中,这条信息的信息量就是 4 比特,如果一共是 32 支球队参赛,那么世界冠军的信息量就是 5 比特,可以看到信息量跟可能情况的对数 log (以 2 为底)有关(这里大概有点知道为什么求熵的公式里会有一个 log 了)。
但是以往经验表示,如果世界杯有 32 支球队参赛,有些球队实力很强,拿到冠军的可能性更大,而有些队伍拿冠军的概率就很小。我们在之前用二分法计算的时候其实是看做每个球队夺冠的概率都相等,因此我们从最可能夺冠的几支球队中猜测冠军球队,实际需要的信息量是小于我们之前方法计算的信息量的。
准确的信息量应该是: H = -(p1 * logp1 + p2 * logp2 + ... + p32 * logp32),其中 p1, ..., p32 分别是这 32 支球队夺冠的概率。我们再回头验算一下,当每支球队夺冠概率相等都是 1/32 的时候,H = -(32 * 1/32 * log1/32) = 5,根据最大熵原理,每个事件概率相同时,熵最大,这件事越不确定。
这里我们只是说了如何计算,那么为什么求总信息量就是所有 -p*logp 再求和呢?维基百科一句话就让我明白了:-logp 就是一种可能性的信息量啊,一个事件总的信息量就是每一种可能的情况的信息量乘以它们发生的概率,其实就是信息量的数学期望。
为什么信息熵要定义成-Σp*log(p)?相关推荐
- 信息熵(entropy)定义公式的简单理解
首先公式长这样: H ( X ) = − ∑ i = 1 n p ( x i ) log p ( x i ) H(X)=-\sum_{i=1}^{n} p\left(x_{i}\right) \l ...
- 为什么一个字节定义成8位?
今天给大家分享一个小小知识点,为什么一个字节定义成8位呢? 一些人没有回答到点子上.这件事得追溯计算机历史,源于IBM360操作系统和图灵奖得主(Fred)Brooks Jr. 布鲁克斯被问到&quo ...
- CodeFirst实体类中,为什么都把ICollectionx定义成virtual?
主要是用于延迟加载,提高性能用的 只有定义成virtual后才可以延迟加载. 延迟加载,默认情况下,延迟加载被支持,如果你希望禁用它,必须显式声明,最好的位置是在 DbContext 的构造器中. p ...
- C语言如何编程换算小时秒,c语言编写 输入一个以秒为单位的时间值,将其转化成“时:分:秒”的形式输出,将转换操作定义成函式...
c语言编写 输入一个以秒为单位的时间值,将其转化成"时:分:秒"的形式输出,将转换操作定义成函式以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整 ...
- 信息熵的定义及物理含义
本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考.markdown版本已归档至[Github仓库:information-theory],需要的朋友们自取.或者公众号[AISha ...
- 小白学习MySQL - varchar类型字段为什么经常定义成255?
很多时候我们看到一些表字符串类型的字段定义为varchar(255),开始以为varchar只能定义为255这个长度值,其实不然. 官方文档所说,varchar有效的最大长度取决于行的容量,以及用的字 ...
- SAP WM LPK1 不能把 cross-material control cycles定义成release order parts
SAP WM LPK1 Error Message - Do not define cross-material control cycles for release order parts – 但是 ...
- php-fpm定义成集群资源时报错解决方法
这是我在实验中碰到的问题,我们在定义php-fpm为资源的时候,用php程序包自带的脚本会报错. 笔者花了很多时间尝试了各种办法,最后找到了一位网友写的脚本,可以解决. 脚本如下: #!/bin/sh ...
- 【slf4j】在Java中如何定义优雅的Log日志
slf4j官网:http://www.slf4j.org/ logback官网:http://logback.qos.ch/ slf4j,log4j以及logback的区别:https://www.c ...
最新文章
- php程序耗时是负数,php 代码测试,代码越在前面越耗时
- JZOJ 5264. 【NOIP2017模拟8.12A组】化学
- List类系列(一):list中各元素出现的次数
- 在ubunut下使用pycharm和eclipse进行python远程调试
- 动手学PaddlePaddle(1):线性回归
- NLP之路-Deep Learning for NLP 文章列举
- SQL数据库不用SQL语句能显示全表的内容_详解mysql数据库sql优化技巧总结
- Linux创建swap文件
- python高阶函数——sorted排序算法
- tensorflow rnn 最简单实现代码
- 百度文库文档免费下载功能
- 算法研究NO8.用数理统计法消除粗大误差
- 计算机网络是由网络硬件网络软件,超星尔雅FPGA应用开发课程设计期末答案
- bp神经网络优化算法对比,提高bp神经网络精度
- spring nature
- (伪)点到线段的距离 C++
- Web大学生网页作业成品——篮球网站设计与实现(HTML+CSS)
- Ubuntu虚拟机全屏问题
- 微信小程序服务器云端,微信小程序云端解决方案.PDF
- 工业产品常用的长度单位有哪些?
热门文章
- A 8b Time-Interleaved Time-Domain ADC with Input-Independent Background Timing Skew Calibration
- autoproxy 匹配规则
- 所有绘画的核心灵魂——素描知识(转)
- GitHub 上 4w+ Star 大佬的求职回忆
- Failed to load class “org.slf4j.impl.StaticLoggerBinder“.
- 虚拟机的网络设置与wifi网络的连接
- bootloader(xboot)起动流程分析
- 【DFT】可测性设计(三)边界扫描测试
- springboot中根据url地址获取图片
- 拼多多、vipkid编程题