Distance-Functions
3 個概率分佈的 Jensen-Shannon 散度計算:可以嗎?
我想計算他遵循 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