I'm trying to use TF-IDF将文档分类。我已经计算了一些文档的tf_idf,但是现在当我试图计算两个文档之间的余弦相似性时,我得到了一个回溯,说:

#len(u)==201, len(v)==246

cosine_distance(u, v)
ValueError: objects are not aligned

#this works though:
cosine_distance(u[:200], v[:200])
>> 0.52230249969265641

对向量进行切片,使len(u)==len(v)是正确的方法吗?我认为余弦相似性适用于不同长度的向量。
我使用的是:
def cosine_distance(u, v):
    """
    Returns the cosine of the angle between vectors v and u. This is equal to
    u.v / |u||v|.
    """
    return numpy.dot(u, v) / (math.sqrt(numpy.dot(u, u)) * math.sqrt(numpy.dot(v, v)))

同样——矢量中tf_idf值的顺序重要吗?应该对它们进行分类吗——或者对这个计算来说不重要吗?

最佳答案

你在计算术语向量的余弦相似性吗?术语向量的长度应该相同。如果文档中没有单词,则该词的值应为0。
我不确定你要对哪些向量应用余弦相似性,但是当做余弦相似性时,你的向量应该总是相同的长度和顺序,这非常重要。
例子:

Term | Doc1 | Doc2
Foo     .3     .7
Bar  |  0   |  8
Baz  |  1   |  1

这里有两个向量(.3,0,1)和(.7,8,1),可以计算它们之间的余弦相似性。如果你比较(.3,1)和(.7,8),你会比较BAZ的DOC1分数和BAR的DOC2分数,这是没有意义的。

关于python - 不同长度矢量的余弦相似度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3121217/

10-10 10:35