Distance-Functions

3 個概率分佈的 Jensen-Shannon 散度計算:可以嗎?

  • May 31, 2012

我想計算他遵循 3 個分佈的詹森-香農散度。下面的計算是否正確?(我遵循了維基百科的 JSD 公式):

P1  a:1/2  b:1/2    c:0
P2  a:0    b:1/10   c:9/10
P3  a:1/3  b:1/3    c:1/3
All distributions have equal weights, ie 1/3.

JSD(P1, P2, P3) = H[(1/6, 1/6, 0) + (0, 1/30, 9/30) + (1/9,1/9,1/9)] - 
                [1/3*H[(1/2,1/2,0)] + 1/3*H[(0,1/10,9/10)] + 1/3*H[(1/3,1/3,1/3)]]

JSD(P1, P2, P3) = H[(1/6, 1/5, 9/30)] - [0 + 1/3*0.693 + 0] = 1.098-0.693 = 0.867

提前致謝…

編輯這裡有一些簡單的髒 Python 代碼也可以計算:

   def entropy(prob_dist, base=math.e):
       return -sum([p * math.log(p,base) for p in prob_dist if p != 0])

   def jsd(prob_dists, base=math.e):
       weight = 1/len(prob_dists) #all same weight
       js_left = [0,0,0]
       js_right = 0    
       for pd in prob_dists:
           js_left[0] += pd[0]*weight
           js_left[1] += pd[1]*weight
           js_left[2] += pd[2]*weight
           js_right += weight*entropy(pd,base)
       return entropy(js_left)-js_right

usage: jsd([[1/2,1/2,0],[0,1/10,9/10],[1/3,1/3,1/3]])

混合分佈有誤。它應該是 代替不等於 1。其熵(自然對數)為 1.084503。您的其他熵項是錯誤的。

我將給出一個計算的細節:

以類似的方式,其他項為 0.325083 和 1.098612。所以最終結果是 1.084503 - (0.6931472 + 0.325083 + 1.098612)/3 = 0.378889

引用自:https://stats.stackexchange.com/questions/29578

comments powered by Disqus