【问题标题】:Normalize cosine similarity values calculated based on tf-idf归一化基于 tf-idf 计算的余弦相似度值
【发布时间】:2016-10-15 00:26:10
【问题描述】:

我基于 tf-idf 矩阵计算余弦相似度:

tfidf_vectorizer_desc = TfidfVectorizer(min_df=5, max_df=0.8, use_idf=True, smooth_idf=True, sublinear_tf=False, tokenizer=tokenize_and_stem)
%time tfidf_matrix_desc = tfidf_vectorizer_desc.fit_transform(descriptions) #fit the vectorizer to text
sim_desc = cosine_similarity(tfidf_matrix_desc)

但是,sim_desc 包含超过 1.0 的相似性(见下文)。据我所知, cosine_similarity 返回的值介于 0 到 1 之间。在这种情况下,我需要对余弦相似度分数进行归一化吗?

sim_desc = cosine_similarity(tfidf_matrix_desc)
print(np.where(sim_desc < 0 ))
print(np.where(sim_desc > 1))
print(format(np.amax(sim_desc), '.20g'),format(np.amin(sim_desc), '.20g'))

(array([], dtype=int64), array([], dtype=int64))
(array([   0,    0,    0, ..., 1496, 1496, 1497]), array([   0,    1,  735, ..., 1495, 1496, 1497]))
1.0000000000000006661 0

【问题讨论】:

    标签: python normalization tf-idf cosine-similarity


    【解决方案1】:

    您尚未指定您正在使用的库,因此如果您需要标准化余弦相似度分数,我无法回答。

    然而,事实是这样的:

    余弦相似度实际上返回 -1 到 +1 之间的值。如果两个向量完全相反 180 度,则余弦相似度为 -1。

    参考: http://blog.christianperone.com/2013/09/machine-learning-cosine-similarity-for-vector-space-models-part-iii/

    【讨论】:

    • 同意您正在使用的特征向量的给定假设。
    猜你喜欢
    • 2017-02-03
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 2012-04-27
    • 2013-02-03
    • 2018-01-28
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多