KL散度及其python實現

2021-07-14 11:08:58 字數 1067 閱讀 3135

kl散度又是乙個從資訊理論、熵的角度考量距離的乙個量。但是,這裡說他是距離有點不妥,因為距離需要滿足4個條件:

1) d(x,x) = 0                    反身性

2) d(x,y) >= 0                  非負性

3) d(x,y) = d(y,x)              對稱性

4) d(x,k)+ d(k,y) >= d(x,y)    三角形法則

但是,很遺憾,我們的kl散度至滿足前面兩條,後面介紹的對稱kl也只能滿足前面三條。所以,我們叫kl散度,而不是叫kl距離。

計算公式就是如此簡單。我們做個例題吧。

假設我們有這樣的兩個分布,a和b,他們出現0和1的概率如下。

這個時候,我們計算a和b之間的kl散度,就是這樣:

so easy的樣子有木有!

如何直觀的理解這樣的乙個度量的量呢。我不說什麼用a的概率去編碼b之類的,直觀的去看kl散度的公式,說白了,p(x)部分可以認為是權重,其值就是p取該值的概率,後面的則是兩者出現該變數的概率之比,然後取對數。取對數當然就是因為資訊熵啦。也就是說,如果某乙個變數出現的概率在p中很小,那麼權重很小,即使在q中很大,使得後半部分值比較大,那麼最後值也不會很大;反過來也一樣。所以,希望kl散度大,那麼就需要有大的權重和大的概率差異,也就是,兩個分布要不一樣。

對稱kl就是kl(p,q)與kl(q,p)的值加起來之後取平均。

import numpy as np

from scipy import *

def asymmetrickl(p,q):

return sum(p * log(p / q)) #calculate the kl divergence between p and q

def symmetricalkl(p,q):

return (asymmetrickl(p,q)+asymmetrickl(q,p))/2.00

上面就是kl散度的計算**了。

Python計算KL散度

python計算kl散度 import numpy as np import scipy.stats x np.random.randint 1,11 for i in range 10 print x print np.sum x px x np.sum x 歸一化 print px y np.r...

KL散度 JS散度

kl divergence kullback leibler divergence kl散度,kl距離,又叫相對熵 relative entropy 衡量兩個概率分布之間的不同程度,是描述兩個概率分布p和q差異的一種方法就是資訊理論學的相對熵 最簡單的情況 當kl divergence為0時,兩個分...

KL散度與JS散度

js散度 jensen shannon divergence 又稱kl距離,相對熵。kl散度是描述兩個概率分布p和q之間差異的一種方法。直觀地說,可以用來衡量給定任意分布偏離真實分布的程度,如果兩個分布完全匹配,那麼kl p q 0,否則它的取值應該是0 inf 之間。kl散度越小,真實分布與近視分...