我的目标是计算以下文本文档之间的 KL 距离:
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
。这是不准确的。
有人知道我在 KL 方面做得不对吗?非常感谢您的建议。