zoukankan      html  css  js  c++  java
  • 信息论-基础知识

          对于一个离散的随机变量x,当我们观察到它的一个值,能给我们带来多少信息呢?这个信息量可以看做是我们观察到x的这个值带来的惊讶程度。我们被告知一个不太可能发生的事发生了要比告知一个非常可能发生的事发生,我们获得信息要多。 所以信息量的多少依赖于概率分布p(x),所以我们可以用关于p(x)的一个函数来建模信息量h(x).那什么函数模型适合表达呢? 
    我们观察两个相互独立的事件x,y,我们观察它得到的信息量,要和单独观察他们得到的信息量之和相等。即 
                                              h(x,y) = h(x) + h(y) 
         而两个独立的时间x,y的概率关系: 
                                              p(x,y) = p(x) p(y) 
         基于上面的观察,信息量必须和p(x)的log函数相关。 
         所以我们得到: 
                                               
         加上负号,可以保证信息量大于等于0。注意一个小概率事件,具有更高的信息量。 log的底数选择并没有限制。信息论中大多都采用2,传输这些信息量需要的2进制位数。
         如果我们想传输这个随机变量的值,我们传输的平均信息量,可以表示为关于分布 p(x)的期望: 
                                                 这个表达式被称为信息熵。 

         在机器学习中,采用比较多的是自然对数形式, 这样 
                                             

         对x=0的情况,由于 
                                               所以我们让p(x)ln(x) = 0 

         如果对这些信息进行编码传输,我们希望概率大的使用较长的编码,概率小的我们采用较长的编码。最大熵能够达到最小长度的编码,关于熵和最短编码长度的关系,可以参考shannon的Noiseless coding theorem。 

         熵用来描述指定随机变量的状态,所需要的平均信息。 如果我们想最大化熵,我们利用拉格朗日乘子: 
                                            
         我们可以得 取得最大值,其中M是x状态数。 

         如果我们有一个联合分布p(x,y),如果x已经知道,那么指定y的值还需要的信息量, 可以通过-ln p(y|x)来描述,所以平均还需要的信息量,可以表示为: 
                                            
    被称为条件熵。我们利用乘法规则,可以得到: 
                                            

         相对熵和互信息: 考虑一个未知的分布p(x),假设我们使用了一个近似的分布q(x)来建模它, 如果我们使用q(x)来构建一个编码模式,用来传输x的值。那么额外需要多指定的信息: 
                                           
         这个式子被称为相对熵或者Kullback-Leibler divergence 相对熵描述了p(x)和q(x)两个分布的差异程度。注意: 
                                           

          我们考虑联合分布p(x,y),如果x,y相互独立,那么p(x,y)=p(x)p(y) 如果他们不相互独立,那么我们想知道他们的相关程度,我们可以使用KL divergence来度量: 
                                           
          这个表达式被称为变量x,y的互信息。从KL divergence的属性我们知道I(x,y)>= 0 当且仅当x和y相互独立时,等号成立。 我们使用加法和乘法规则得到互信息是相对于条件熵的: 
                                         

  • 相关阅读:
    JQuery实现Ajax应用
    访问本地json文件因跨域导致的问题
    python_控制台输出带颜色的文字方法
    查询数据量大时,你会选择关联表查询还是循环中依个查询? up
    自己动手写SQL字符串分解函数Split up
    关于Access数据库执行Update语句后,不报错,但影响行数总是返回0的问题...... up
    TCP和UDP的区别
    Linxu系统下怎么安装vim编辑器
    网络编程 委托
    学习POS的数据包分析
  • 原文地址:https://www.cnblogs.com/souxun2014/p/4035411.html
Copyright © 2011-2022 走看看