我還有一個問題,我希望有人能幫助我。Jensen-Shannon Divergence
我使用Jensen-Shannon-Divergence來測量兩個概率分佈之間的相似度。相似性得分似乎是正確的,因爲它們落在1和0之間,1表示分佈是相等的。
但是,我不確定實際上是否存在某個錯誤,並想知道某人是否能夠說'是的,這是正確的'或'不,你做錯了什麼'。
下面是代碼:
from numpy import zeros, array
from math import sqrt, log
class JSD(object):
def __init__(self):
self.log2 = log(2)
def KL_divergence(self, p, q):
""" Compute KL divergence of two vectors, K(p || q)."""
return sum(p[x] * log((p[x])/(q[x])) for x in range(len(p)) if p[x] != 0.0 or p[x] != 0)
def Jensen_Shannon_divergence(self, p, q):
""" Returns the Jensen-Shannon divergence. """
self.JSD = 0.0
weight = 0.5
average = zeros(len(p)) #Average
for x in range(len(p)):
average[x] = weight * p[x] + (1 - weight) * q[x]
self.JSD = (weight * self.KL_divergence(array(p), average)) + ((1 - weight) * self.KL_divergence(array(q), average))
return 1-(self.JSD/sqrt(2 * self.log2))
if __name__ == '__main__':
J = JSD()
p = [1.0/10, 1.0/10, 0]
q = [0, 1.0/10, 9.0/10]
print J.Jensen_Shannon_divergence(p, q)
的問題是,我覺得成績比較兩個文本文檔時,例如不夠高。但是,這純粹是一種主觀的感覺。
任何幫助,一如既往,讚賞。
也許嘗試輸出比較(https://www.mathworks.com/matlabcentral/fileexchange/20689-jensen-shannon-divergence)或者在Octave中運行它。 – 2013-04-08 13:22:09
'if p [x]!= 0.0或p [x]!= 0'看起來很奇怪。 – 2013-04-08 13:31:24
如果使用p [x]!= 0.0或p [x]!= 0來確保我們不考慮條目是零,無論它們是浮點數還是整數,那麼您所指的是?或者你的意思是說這條線很奇怪嗎?非常感謝。 – Martyn 2013-04-08 14:03:15