统计分布的距离/相似性计算
统计分布的距离/相似性计算KL散度(Kullback-Leible divergence)KL散度可以用于描述两个分布之间的距离,假设p(x)p(x)p(x)与q(x)q(x)q(x)是随机变量X的分布,则它们的KL散度为D(p∣∣q)=∫−∞+∞p(x)logp(x)q(x)dxD(p||q) = \int_{ - \infty }^{ + \infty } {p(x)log\frac...
统计分布的距离/相似性计算
KL散度(Kullback-Leible divergence)
- KL散度可以用于描述两个分布之间的距离,假设 p ( x ) p(x) p(x)与 q ( 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)=∫−∞+∞p(x)logq(x)p(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)=i=1∑np(x)logq(x)p(x)
它是从信息熵的角度出发,分析两个分布之间的差异程度,所以又称为相对熵。如果两个分布完全相同,则 D ( p ∣ ∣ q ) = 0 D(p||q) = 0 D(p∣∣q)=0。
-
由上面的公式可以知道, D ( p ∣ ∣ q ) ≠ D ( q ∣ ∣ p ) D(p||q) \neq D(q||p) D(p∣∣q)̸=D(q∣∣p),即如果要对不同的分布进行比较的话,一定要选好基准的分布。
-
matlab中散度的计算方法如下,这是参考:https://www.mathworks.com/matlabcentral/fileexchange/13089-kldiv上的,但是修改了其中 q ( x ) = 0 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) (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(p∣∣q)=21KL(p∣∣2p+q)+21KL(q∣∣2p+q)
一般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||] W(p,q)=γ∼Π(p,q)infE(x,y)∼γ[∣∣x−y∣∣]
Π ( p , q ) \Pi(p, q) Π(p,q)表示p和q分布组合起来的连续分布的集合,对于每个联合分布 γ \gamma γ,取得一个样本 x , y x,y 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)]) MMD(F,p,q)=f∈Fmax(Ex∼p[f(x)]−Ey∼q[f(y)])
更多推荐


所有评论(0)