统计分布的距离/相似性计算
KL散度(Kullback-Leible divergence)
- KL散度可以用于描述两个分布之间的距离,假设 与 是随机变量X的分布,则它们的KL散度为
离散情况下,如下
它是从信息熵的角度出发,分析两个分布之间的差异程度,所以又称为相对熵
。如果两个分布完全相同,则
。
-
由上面的公式可以知道, ,即如果要对不同的分布进行比较的话,一定要选好基准的分布。
-
matlab中散度的计算方法如下,这是参考:https://www.mathworks.com/matlabcentral/fileexchange/13089-kldiv上的,但是修改了其中 时,计算结果为inf的bug,主要就是在每个离散的分布上加了一个很小的值。
function dist=KLDiv(P,Q) % dist = KLDiv(P,Q) Kullback-Leibler divergence of two discrete probability % distributions % P and Q are automatically normalised to have the sum of one on rows % have the length of one at each % P = n x nbins % Q = 1 x nbins or n x nbins(one to one) % dist = n x 1 if size(P,2)~=size(Q,2) error('the number of columns in P and Q should be the same'); end if sum(~isfinite(P(:))) + sum(~isfinite(Q(:))) error('the inputs contain non-finite values!') end % prevent Q from min value being zero Q = Q + eps; % normalizing the P and Q if size(Q,1)==1 Q = Q ./sum(Q); P = P ./repmat(sum(P,2),[1 size(P,2)]); temp = P.*log(P./repmat(Q,[size(P,1) 1])); temp(isnan(temp))=0;% resolving the case when P(i)==0 dist = sum(temp,2); elseif size(Q,1)==size(P,1) Q = Q ./repmat(sum(Q,2),[1 size(Q,2)]); P = P ./repmat(sum(P,2),[1 size(P,2)]); temp = P.*log(P./Q); temp(isnan(temp))=0; % resolving the case when P(i)==0 dist = sum(temp,2); end
JS散度(Jensen-Shannon divergence)
- JS散度是由KL散度引申而来,主要是为了解决KL散度不对称的问题,它的值一般在
之间
一般JS散度越小,表示分布越相似。
Wasserstein距离
- Wasserstein距离又称为
Earth-Mover距离(EM距离)
,可以简单地理解为将分布p挪到分布q所需要的最短距离,计算公式如下
表示p和q分布组合起来的连续分布的集合,对于每个联合分布
,取得一个样本
,计算
的期望,这个期望能够取到的下界就是Wasserstein距离
。
MMD(maximum mean discrepancy,最大平均差异)
- MMD最先是被用于双样本的检测问题,用于判断两个样本是否相同。基本假设是:对于一个人变换函数f,如果2个分布的样本在f上对应的映射的均值都相等,则可以认为这两个分布属于同一个分布。
- MMD计算如下:基于两个分布的样本,寻找一个在样本空间的连续函数f,求不同分布的样本在f上的均值,当这两个分布的均值的差异(mean discrepancy)最大时(通过选取f),计算得到的结果就是最后的MMD。具体的计算公式如下