统计分布的距离/相似性计算

统计分布的距离/相似性计算

KL散度(Kullback-Leible divergence)

  • KL散度可以用于描述两个分布之间的距离,假设 p ( x ) p(x) q ( x ) q(x) 是随机变量X的分布,则它们的KL散度为

D ( p q ) = + p ( x ) l o g p ( x ) q ( x ) d x D(p||q) = \int_{ - \infty }^{ + \infty } {p(x)log\frac{{p(x)}}{{q(x)}}dx}

离散情况下,如下

D ( p q ) = i = 1 n p ( x ) l o g p ( x ) q ( x ) D(p||q) = \sum\limits_{i = 1}^n {p(x)log\frac{{p(x)}}{{q(x)}}}

它是从信息熵的角度出发,分析两个分布之间的差异程度,所以又称为相对熵。如果两个分布完全相同,则 D ( p q ) = 0 D(p||q) = 0

  • 由上面的公式可以知道, D ( p q ) D ( q p ) D(p||q) \neq D(q||p) ,即如果要对不同的分布进行比较的话,一定要选好基准的分布。

  • matlab中散度的计算方法如下,这是参考:https://www.mathworks.com/matlabcentral/fileexchange/13089-kldiv上的,但是修改了其中 q ( x ) = 0 q(x)=0 时,计算结果为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散度不对称的问题,它的值一般在 ( 0 , 1 ) (0,1) 之间
    J S ( p q ) = 1 2 K L ( p p + q 2 ) + 1 2 K L ( q p + q 2 ) JS(p||q)=\frac{1}{2}KL(p||\frac{p+q}{2})+\frac{1}{2}KL(q||\frac{p+q}{2})

一般JS散度越小,表示分布越相似。

Wasserstein距离

  • Wasserstein距离又称为Earth-Mover距离(EM距离),可以简单地理解为将分布p挪到分布q所需要的最短距离,计算公式如下

W ( p , q ) = inf γ Π ( p , q ) E ( x , y ) γ [ x y ] W(p, q)=\inf_{\gamma \sim\Pi(p, q)} \mathbb E_{(x,y) \sim \gamma}[||x-y||]

Π ( p , q ) \Pi(p, q) 表示p和q分布组合起来的连续分布的集合,对于每个联合分布 γ \gamma ,取得一个样本 x , y x,y ,计算 x y ||x-y|| 的期望,这个期望能够取到的下界就是Wasserstein距离

MMD(maximum mean discrepancy,最大平均差异)

  • MMD最先是被用于双样本的检测问题,用于判断两个样本是否相同。基本假设是:对于一个人变换函数f,如果2个分布的样本在f上对应的映射的均值都相等,则可以认为这两个分布属于同一个分布。
  • MMD计算如下:基于两个分布的样本,寻找一个在样本空间的连续函数f,求不同分布的样本在f上的均值,当这两个分布的均值的差异(mean discrepancy)最大时(通过选取f),计算得到的结果就是最后的MMD。具体的计算公式如下

M M D ( F , p , q ) = max f F ( E x p [ f ( x ) ] E y q [ f ( y ) ] ) MMD(F,p,q) = \mathop {\max }\limits_{f \in F} ({E_{x \sim p}}[f(x)] - {E_{y \sim q}}[f(y)])

猜你喜欢

转载自blog.csdn.net/u012526003/article/details/84455456