paper 22:kl-divergence(KL散度)实现代码

这个函数很重要:

function KL = kldiv(varValue,pVect1,pVect2,varargin)

%KLDIV Kullback-Leibler or Jensen-Shannon divergence between two distributions.
% KLDIV(X,P1,P2) returns the Kullback-Leibler divergence between two
% distributions specified over the M variable values in vector X. P1 is a
% length-M vector of probabilities representing distribution 1, and P2 is a
% length-M vector of probabilities representing distribution 2. Thus, the
% probability of value X(i) is P1(i) for distribution 1 and P2(i) for
% distribution 2. The Kullback-Leibler divergence is given by:
%
% KL(P1(x),P2(x)) = sum[P1(x).log(P1(x)/P2(x))]
%
% If X contains duplicate values, there will be an warning message, and these
% values will be treated as distinct values. (I.e., the actual values do
% not enter into the computation, but the probabilities for the two
% duplicate values will be considered as probabilities corresponding to
% two unique values.) The elements of probability vectors P1 and P2 must
% each sum to 1 +/- .00001.
%
% A "log of zero" warning will be thrown for zero-valued probabilities.
% Handle this however you wish. Adding ‘eps‘ or some other small value
% to all probabilities seems reasonable. (Renormalize if necessary.)
%
% KLDIV(X,P1,P2,‘sym‘) returns a symmetric variant of the Kullback-Leibler
% divergence, given by [KL(P1,P2)+KL(P2,P1)]/2. See Johnson and Sinanovic
% (2001).
%
% KLDIV(X,P1,P2,‘js‘) returns the Jensen-Shannon divergence, given by
% [KL(P1,Q)+KL(P2,Q)]/2, where Q = (P1+P2)/2. See the Wikipedia article
% for "Kullback朙eibler divergence". This is equal to 1/2 the so-called
% "Jeffrey divergence." See Rubner et al. (2000).
%
% EXAMPLE: Let the event set and probability sets be as follow:
% X = [1 2 3 3 4]‘;
% P1 = ones(5,1)/5;
% P2 = [0 0 .5 .2 .3]‘ + eps;
%
% Note that the event set here has duplicate values (two 3‘s). These
% will be treated as DISTINCT events by KLDIV. If you want these to
% be treated as the SAME event, you will need to collapse their
% probabilities together before running KLDIV. One way to do this
% is to use UNIQUE to find the set of unique events, and then
% iterate over that set, summing probabilities for each instance of
% each unique event. Here, we just leave the duplicate values to be
% treated independently (the default):
% KL = kldiv(X,P1,P2);
% KL =
% 19.4899
%
% Note also that we avoided the log-of-zero warning by adding ‘eps‘
% to all probability values in P2. We didn‘t need to renormalize
% because we‘re still within the sum-to-one tolerance.
%
% REFERENCES:
% 1) Cover, T.M. and J.A. Thomas. "Elements of Information Theory," Wiley,
% 1991.
% 2) Johnson, D.H. and S. Sinanovic. "Symmetrizing the Kullback-Leibler
% distance." IEEE Transactions on Information Theory (Submitted).
% 3) Rubner, Y., Tomasi, C., and Guibas, L. J., 2000. "The Earth Mover‘s
% distance as a metric for image retrieval." International Journal of
% Computer Vision, 40(2): 99-121.
% 4) Kullback朙eibler divergence. Wikipedia, The Free Encyclopedia.
%
% See also: MUTUALINFO, ENTROPY
if ~isequal(unique(varValue),sort(varValue)),
warning(‘KLDIV:duplicates‘,‘X contains duplicate values. Treated as distinct values.‘)
end
if ~isequal(size(varValue),size(pVect1)) || ~isequal(size(varValue),size(pVect2)),
error(‘All inputs must have same dimension.‘)
end
% Check probabilities sum to 1:
if (abs(sum(pVect1) - 1) > .00001) || (abs(sum(pVect2) - 1) > .00001),
error(‘Probablities don‘‘t sum to 1.‘)
end
if ~isempty(varargin),
switch varargin{1},
case ‘js‘,
logQvect = log2((pVect2+pVect1)/2);
KL = .5 * (sum(pVect1.*(log2(pVect1)-logQvect)) + ...
sum(pVect2.*(log2(pVect2)-logQvect)));
case ‘sym‘,
KL1 = sum(pVect1 .* (log2(pVect1)-log2(pVect2)));
KL2 = sum(pVect2 .* (log2(pVect2)-log2(pVect1)));
KL = (KL1+KL2)/2;

otherwise
error([‘Last argument‘ ‘ "‘ varargin{1} ‘" ‘ ‘not recognized.‘])
end
else
KL = sum(pVect1 .* (log2(pVect1)-log2(pVect2)));
end

时间: 2024-08-06 03:36:02

paper 22:kl-divergence(KL散度)实现代码的相关文章

最大似然估计 (Maximum Likelihood Estimation), 交叉熵 (Cross Entropy) 与深度神经网络

最近在看深度学习的"花书" (也就是Ian Goodfellow那本了),第五章机器学习基础部分的解释很精华,对比PRML少了很多复杂的推理,比较适合闲暇的时候翻开看看.今天准备写一写很多童鞋们w未必完全理解的最大似然估计的部分. 单纯从原理上来说,最大似然估计并不是一个非常难以理解的东西.最大似然估计不过就是评估模型好坏的方式,它是很多种不同评估方式中的一种.未来准备写一写最大似然估计与它的好朋友们,比如说贝叶斯估计 (Beyasian Estimation), 最大后验估计(Max

CS281: Advanced Machine Learning 第二节 information theory 信息论

信息论 熵 如果离散随机变量有P(X)分布,那么x所携带的熵(信息量): 之所以用log2来作为底,是为了方便衡量该信息可以用多少bit来表示.因为1个bit非0即1. 从上公式可以推导出:当k个状态发生的几率一样时,随机变量X所携带的熵越大.正如下图表示的伯努利分布所携带的熵随着概率变化的结果: KL divergence KL divergence 全称Kullback-Leibler divergence , 用来衡量两个分布之间的离散程度.公式如下: H (p, q)  是cross e

【机器学习基础】熵、KL散度、交叉熵

熵(entropy).KL 散度(Kullback-Leibler (KL) divergence)和交叉熵(cross-entropy)在机器学习的很多地方会用到.比如在决策树模型使用信息增益来选择一个最佳的划分,使得熵下降最大:深度学习模型最后一层使用 softmax 激活函数后,我们也常使用交叉熵来计算两个分布的"距离".KL散度和交叉熵很像,都可以衡量两个分布之间的差异,相互之间可以转化. 1. 如何量化信息? 信息论是应用数学的一个分支,主要研究的是对一个信号包含信息的多少进

KL散度&互信息

KL散度&互信息 KL散度(KL divergence) 假设我们是一组正在广袤无垠的太空中进行研究的科学家.我们发现了一些太空蠕虫,这些太空蠕虫的牙齿数量各不相同.现在我们需要将这些信息发回地球.但从太空向地球发送信息的成本很高,所以我们需要用尽量少的数据表达这些信息.我们有个好方法:我们不发送单个数值,而是绘制一张图表,其中 X 轴表示所观察到的不同牙齿数量(0,1,2-),Y 轴是看到的太空蠕虫具有 x 颗牙齿的概率(即具有 x 颗牙齿的蠕虫数量/蠕虫总数量).这样,我们就将观察结果转换成

(转载)KL距离,Kullback-Leibler Divergence

转自:KL距离,Kullback-Leibler Divergence KL距离,是Kullback-Leibler差异(Kullback-Leibler Divergence)的简称,也叫做相对熵(Relative Entropy).它衡量的是相同事件空间里的两个概率分布的差异情况.其物理意义是:在相同事件空间里,概率分布P(x)的事件空间,若用概率分布Q(x)编码时,平均每个基本事件(符号)编码长度增加了多少比特.我们用D(P||Q)表示KL距离,计算公式如下: 注:当两个分布比较接近时,D

特征选择(三)-K-L变换

上一讲说到,各个特征(各个分量)对分类来说,其重要性当然是不同的. 舍去不重要的分量,这就是降维. 聚类变换认为:重要的分量就是能让变换后类内距离小的分量. 类内距离小,意味着抱团抱得紧. 但是,抱团抱得紧,真的就一定容易分类么? 如图1所示,根据聚类变换的原则,我们要留下方差小的分量,把方差大(波动大)的分量丢掉,所以两个椭圆都要向y轴投影,这样悲剧了,两个重叠在一起,根本分不开了.而另一种情况却可以这么做,把方差大的分量丢掉,于是向x轴投影,很顺利就能分开了.因此,聚类变换并不是每次都能成功

K-L变换

K-L变换( Karhunen-Loeve Transform)是建立在统计特性基础上的一种变换,有的文献也称为霍特林(Hotelling)变换,因他在1933年最先给出将离散信号变换成一串不相关系数的方法.K-L变换的突出优点是去相关性好,是均方误差(MSE,Mean Square Error)意义下的最佳变换,它在数据压缩技术中占有重要地位. K-L(Karhunen-Loeve)变换形式 设X=(X1,X2,-,XN)T为N维随机矢量,mX=E(X)和CX=E{(X-mX)(X-mX)T}

【图像处理中的数学修炼】一书之代码(1/3)

数字图像处理对数学的要求颇高,这不禁令很多学习者望而却步.在阅读图像处理方面的论文时,面对梯度.散度.黑塞矩阵.傅里叶变换等这些本该在微积分中早已耳熟能详的概念时,很多人仍然感觉一筹莫展.为了弭平图像处理道路上的数学险阻,帮助更多人学好数字图像处理,并更快地具备深入研究的能力.笔者特别撰写了这本<图像处理中的数学修炼>(该书现已由清华大学出版社正式出版).欲了解<图像处理中的数学修炼>的更多详细内容,你可以参考本书的目录. 通常,我不喜欢翻开一本技术书,里面满篇满篇的都是代码.我也

JS散度

JS散度(Jensen-Shannon divergence) JS散度解决了KL不对称的问题,JS是对称的. 很明显,如果P1,P2完全相同,那么JS =0, 如果完全不相同,那么就是1. JS散度是利用KL散度来得到的.JS是对称的而且值是有界的[0,1]. P,Q和第三个分布进行KL计算(第三个分布:(P+Q)/2 ) JS散度是有界的: 但是KL和JS散度来度量时候有一个问题: 如果两个分配P,Q离得很远,完全没有重叠的时候,那么KL值是没有意义的,而JS值是一个常数.这在学习算法中是比