各种形式的熵函数,KL距离
自信息量I(x)=-log(p(x)),其他依次类推。
离散变量x的熵H(x)=E(I(x))=-$\sum\limits_{x}{p(x)lnp(x)}$
连续变量x的微分熵H(x)=E(I(x))=-$\int{p(x)lnp(x)dx} $
条件熵H(y|x)=-$\int\int{p(x,y)lnp(y|x)dydx}$
两个变量X和 Y 的联合熵定义为:
H(X,Y)=-$\int\int{p(x,y)lnp(x,y)dxdy}$
H(x,y)=H(y|x)+H(x)
若x,y独立,H(x,y)=H(x)+H(y),此时对x的了解不能增进对y的了解。
交叉熵Cross Entropy
H(p;q)=-$\int{p(x)lnq(x)dx}$
很少见,通常使用KL距离
Kullback-Leibler divergence:KL(p||q)=-$\int{p(x)lnq(x)dx}-(-\int{p(x)lnp(x)dx})$=H(p)+H(p;q)=-$\int{p(x)ln{\frac{q(x)}{p(x)}}dx}$
p=q时,KL(p||q)=0,H(p;q)=H(p)
交叉熵与kl距离相差一个H(p)
当p未知而q已知时,通过改变KL中的p、q的位置,可以减少未知量,便于计算相似度。
交叉熵是一种万能的Monte-Carlo技术,常用于稀有事件的仿真建模、多峰函数的最优化问题。交叉熵技术已用于解决经典的旅行商问题、背包问题、最短路问题、最大割问题等。这里给一个文章链接:A Tutorial on the Cross-Entropy Method
交叉熵算法的推导过程中又牵扯出来一个问题:如何求一个数学期望?常用的方法有这么几种:
概率方法,比如Crude Monte-Carlo
测度变换法change of measure
偏微分方程的变量代换法
Green函数法
Fourier变换法
在实际中变量X服从的概率分布h往往是不知道的,我们会用g来近似地代替h----这本质上是一种函数估计。有一种度量g和h相近程度的方法叫 Kullback-Leibler距离,又叫交叉熵,通常选取g和h具有相同的概率分布类型(比如已知h是指数分布,那么就选g也是指数分布)----参数估计,只是pdf参数不一样(实际上h中的参数根本就是未知的)。
基于期望交叉熵的特征项选择
CE(w)=$\sum\limits_{i}p(c_{i}|w)log\frac{p(c_{i}|w}{p(c_{i}}$
p(ci|w)表示在出现词条w时文档属于类别ci的概率。
交叉熵反应了文本类别的概率分布与在出现了某个词条的情况下文本类别的概率分布之间的距离。词条的交叉熵越大,对文本类别分布影响也就越大。所以选CE最大的K个词条作为最终的特征项。
互信息Mutual Informantion
yj对xi的互信息定义为后验概率与先验概率比值的对数。
I(x,y)=log$\frac{p(x|y)}{p(x)}=I(x)-I(x|y)$
互信息越大,表明y对于确定x的取值的贡献度越大。
系统的平均互信息
I(X,Y)=H(X)-H(X|Y)=H(Y)-H(Y|X)
可见平均互信息就是信息增益!
I(X,Y)=KL(p(x,y)||p(x)p(y))=-$\int\int{p(x,y)ln(\frac{p(x)p(y)}{p(x,y)})dxdy}$
互信息在特征选择中的应用
词条w与类别ci的互信息为
MI(w,c)=log$\frac{p(w|c)}{p(w)}$
p(w)表示出现w的文档点总文档数目的比例,p(w|ci)表示在类别ci中出现w的文档点总文档数目的比例。
对整个系统来说,词条w的互信息为
$MI_{avg}(w,c)=\sum\limits_{i}p(c)log\frac{p(w|c)}{p(w)}$
最后选互信息最大的前K个词条作为特征项。
各种形式的熵函数,KL距离的更多相关文章
- (转载)KL距离,Kullback-Leibler Divergence
转自:KL距离,Kullback-Leibler Divergence KL距离,是Kullback-Leibler差异(Kullback-Leibler Divergence)的简称,也叫做相对 ...
- [NLP自然语言处理]计算熵和KL距离,java实现汉字和英文单词的识别,UTF8变长字符读取
算法任务: 1. 给定一个文件,统计这个文件中所有字符的相对频率(相对频率就是这些字符出现的概率——该字符出现次数除以字符总个数,并计算该文件的熵). 2. 给定另外一个文件,按上述同样的方法计算字符 ...
- 最大熵与最大似然,以及KL距离。
DNN中最常使用的离散数值优化目标,莫过于交差熵.两个分布p,q的交差熵,与KL距离实际上是同一回事. $-\sum plog(q)=D_{KL}(p\shortparallel q)-\sum pl ...
- KL距离,Kullback-Leibler Divergence
http://www.cnblogs.com/ywl925/p/3554502.html http://www.cnblogs.com/hxsyl/p/4910218.html http://blog ...
- 【转载】 KL距离(相对熵)
原文地址: https://www.cnblogs.com/nlpowen/p/3620470.html ----------------------------------------------- ...
- KL距离(相对熵)
KL距离,是Kullback-Leibler差异(Kullback-Leibler Divergence)的简称,也叫做相对熵(Relative Entropy).它衡量的是相同事件空间里的两个概率分 ...
- KL散度、JS散度、Wasserstein距离
1. KL散度 KL散度又称为相对熵,信息散度,信息增益.KL散度是是两个概率分布 $P$ 和 $Q$ 之间差别的非对称性的度量. KL散度是用来 度量使用基于 $Q$ 的编码来编码来自 $P$ 的 ...
- PRML读书会第十章 Approximate Inference(近似推断,变分推断,KL散度,平均场, Mean Field )
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:02:04 我们在前面看到,概率推断的核心任务就是计算某分布下的某个函数的期望.或者计算边缘概率分布.条件 ...
- 信息论相关概念:熵 交叉熵 KL散度 JS散度
目录 机器学习基础--信息论相关概念总结以及理解 1. 信息量(熵) 2. KL散度 3. 交叉熵 4. JS散度 机器学习基础--信息论相关概念总结以及理解 摘要: 熵(entropy).KL 散度 ...
随机推荐
- Qt5文件操作_保存成"UTF-8"格式
1. bool TdrawSvg::Save2File(char* _pcFullFileName) { // http://blog.csdn.net/u011314012/article/deta ...
- Windows下的Python 3.6.1的下载与安装(适合32bits和64bits)(图文详解)
不多说,直接上干货! 为什么,这么简单的一个python,我还要特意来写一篇博客呢? 是因为留念下,在使用了Anaconda2和Anaconda3的基础上,现在需安装python3.6.0来做数据分析 ...
- TCP与UDP各自优缺点与区别
TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认.窗口.重传.拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源. TCP的缺 ...
- Android集成人脸识别demo分享
本应用来源于虹软人工智能开放平台,人脸识别技术工程如何使用? 1.下载代码 git clone https://github.com/andyxm/ArcFaceDemo.git 2.下载虹软人脸识别 ...
- Altium Designer PCB的时候 高亮显示引脚连线
按住Ctrl ,左击连线,就可以高亮显示两个连接的引脚.
- Python pymysql 增删改查封装
关于pymysql 的增删改查,简单做个封装,方便后面使用直接拿来调用即可. 其中 增删改 的处理其实是一致的,本可以使用统一的方法,但是为了明显区分,这里分开来写了. 直接看代码就即可,如下: # ...
- lua --- unpack
unpack 返回数组中的所有元素,包括 nil,注意是数组,对于 k-v 是不返回的!!! do , ,o = } print(unpack(tab)) --默认从索引 1 开始 )) --从索引 ...
- python中的面向对象学习以及类的多态
接下来类的第三个重要的特性:多态(一种接口,多种实现) 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特 ...
- 利用unittest+ddt进行接口测试(二):使用yaml文件管理测试数据
知道ddt的基本使用方法之后,练习把之前用excel文件来维护的接口测试用例改用unittest+ddt来实现. 这里我选用yaml文件来管理接口参数,开始本来想用json,但是json无法添加注释, ...
- (转)C# Delegate.Invoke、Delegate.BeginInvoke
Delegate的Invoke.BeginInvoke 1.Delegate.Invoke (委托同步调用) a.委托的Invoke方法,在当前线程中执行委托. b.委托执行时阻塞当前线程,知道委托执 ...