KL散度與JS散度


1.KL散度

KL散度( Kullback–Leibler divergence)是描述兩個概率分布P和Q差異的一種測度。對於兩個概率分布P、Q,二者越相似,KL散度越小。

KL散度的性質:P表示真實分布,Q表示P的擬合分布

  1. 非負性:KL(P||Q)>=0,當P=Q時,KL(P||Q)=0;
  2. 反身性:KL(P||P)=0
  3. 非對稱性:D(P||Q) ≠ D(Q||P)
  4. KL散度不滿足三角不等

 python 代碼實現:

from scipy import stats

P = [0.2, 0.4, 0.4]
Q = [0.4, 0.2, 0.5]
print(stats.entropy(P,Q))

0.1446821953906301

 KL散度很容易梯度消失,KL 散度假設這兩個分布共享相同的支撐集(也就是說,它們被定義在同一個點集上)。如果2個分布相聚太遠或者2個分布之間沒有重疊,計算出來的值為無窮大。

2.JS散度

  • JS散度的取值范圍在0-1之間,完全相同時為0
  • JS散度是對稱的

 

 

from scipy import stats
import numpy as np
P =np.asarray( [[0.00934234 , 2.1068802],[0.01882005 , 2.03656788],[ 0.25182744 , 2.14507649]])

Q = np.asarray([[ 0.34670991, -0.24534987],[ 0.93025953 ,-0.69697827],[ 0.47976121, -0.33842087]])
M = (P+Q)/2
print(0.5*stats.entropy(P, M)+0.5*stats.entropy(Q, M))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM