我的目標是計算下面的文本文檔之間的KL距離:庫勒巴克 - 萊布勒(KL)文本的文檔之間的距離的計算使用numpy的
1)The boy is having a lad relationship
2)The boy is having a boy relationship
3)It is a lovely day in NY
我首先的矢量化的文件,以便輕鬆所適用numpy的
1)[1,1,1,1,1,1,1]
2)[1,2,1,1,1,2,1]
3)[1,1,1,1,1,1,1]
我然後應用以下代碼用於計算文本之間KL距離:
import numpy as np
import math
from math import log
v=[[1,1,1,1,1,1,1],[1,2,1,1,1,2,1],[1,1,1,1,1,1,1]]
c=v[0]
def kl(p, q):
p = np.asarray(p, dtype=np.float)
q = np.asarray(q, dtype=np.float)
return np.sum(np.where(p != 0,(p-q) * np.log10(p/q), 0))
for x in v:
KL=kl(x,c)
print KL
以上是上述代碼的結果:[0.0, 0.602059991328, 0.0]
。 文本1和3完全不同,但它們之間的距離爲0,而高度相關的文本1和2的距離爲0.602059991328
。這是不準確的。
有沒有人有一個想法,我不正確地對待吉隆坡?非常感謝您的建議。
那麼,v [0] == v [2],因此在kl函數p-q中是0,那麼和就是0.你是什麼意思「矢量化文檔」?你的載體1和3是相等的。 –
@ J.Martinot_Lagarde感謝您的觀察。在此處進行矢量化意味着要對文檔中的每個單詞進行頻率計數,並使用這些值來表示文檔。這裏的問題是如何以這樣的方式表示每個文檔,使得使用KL可以精確計算兩個文檔之間的距離。 – Tiger1