python psi_换个角度理解PSI(2)——从KL散度到PSI的奇幻之旅

相对熵

上次我们讲到IV和PSI的公式可以用一个通用表达式表示:

并且用熵的概念简要的说明了为什么对数项可以表明信息量的大小。 对于通用公式的后半部分,没有展开来讲,今天我们这里入手,其实:

对后一项进行变换

从这部分入手,有一种更好的解释,熟悉熵家族的同学可能已经看出来了,每一项其实都是相对熵(也被称为KL散度),PSI其实是

分布互相的相对熵之和。

非对称度量指标:KL散度

KL散度又称相对熵、信息散度。KL散度主要是用来衡量两个概率分布之间的差异。

假设

是关于

的两个概率分布,则

的KL散度为

KL散度具有以下性质KL散度具有非对称性,KL散度尽管被用来度量两个分布的相似度或者说距离,但是KL散度本身不是距离。

KL散度同样不满足三角不等式

KL散度具有非负性,因为对数函数是凸函数,所以KL散度的值为非负数。

这里简单明确下,本质上,KL散度度量的是两者之间的信息损失,而不是两者之间的距离。

距离的定义,在传统的教材里面距离度量的定义就是需要满足四个条件:非负性,对称性,同一性 ,和三角不等式,这样的定义主要是从经验出发,而KL散度不满足对称性和三角不等式。

我们知道KL散度和距离度量指标最大的区别在于它是非对称度量,既然是非对称的,这里我们解决一下

有什么不一样

(1)首先,公式

涉及了两个分布,其中要传递的信息来自分布:

;信息传递的方式依赖的分布:

;分布

中可能性越大的事件,对

的影响也越大。如果想让

尽可能的小,就要优先关注

事件中的常见事件,并确保它在

事件中也不是特别罕见。因为一旦事件x在

分布罕见,意味着我们没有优化传递x的成本,传递x需要的成本

会很大。当这套传递方式在用来传递

分布时,传递常见事件需要的成本会很大,整体成本也就会很大。

(2)我们记熵

;交叉熵

,我们会发现;

,我们发现第二项

和分布

无关,所以最小化KL散度就是最小化交叉熵;但是反过来,

,两项均和

相关,最小化KL散度为最小化

的交叉熵和

的熵的差。

这里理解起来有点绕,但是从公式直观上我们也能看出来,

是不等于

的。

对称度量:JS散度

为了解决KL散度的不对称性(数学家们的强迫症,确实在实际中使用中更加方便,有更好的性质),数学家发明了一种KL变种,JS散度:

取值为0到1之间

对称度量:PSI

同样的,我们看到:

PSI可以看做是解决KL散度非对称性的一个对称性度量指标,用于度量分布之间的差异。

KL散度 python实现

从公式可以发现,P 和 Q 中元素的个数不用相等,只需要两个分布中的离散元素一致。 因此计算不管是计算KL散度还是计算PSI,都需要对变量进行离散化,保证两个分布的离散元素一致。

import numpy as np

import scipy.stats

p=np.asarray([0.65,0.25,0.07,0.03])

q=np.array([0.6,0.25,0.1,0.05])

def KL_divergence(p,q):

return scipy.stats.entropy(p, q)

print(KL_divergence(p,q)) # 0.011735745199107783

print(KL_divergence(q,p)) # 0.013183150978050884

JS散度 python实现

import numpy as np

import scipy.stats

p=np.asarray([0.65,0.25,0.07,0.03])

q=np.array([0.6,0.25,0.1,0.05])

q2=np.array([0.1,0.2,0.3,0.4])

def JS_divergence(p,q):

M=(p+q)/2

return 0.5*scipy.stats.entropy(p, M)+0.5*scipy.stats.entropy(q, M)

print(JS_divergence(p,q)) # 0.003093977084273652

print(JS_divergence(p,q2)) # 0.24719159952098618

print(JS_divergence(p,p)) # 0.0

PSI python实现

这个我们留到下期再讲(还有hive实现psi计算的彩蛋,欢迎持续关注)

参考资料


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部