【问题标题】:Computing cosine similarity using Python使用 Python 计算余弦相似度
【发布时间】:2017-02-02 02:14:48
【问题描述】:

我编写了以下代码来计算多个预处理文档之间的余弦相似度(停用词去除、词干提取和词频-逆文档频率)。

print(X.shape)
similarity = []
for each in X:
    similarity.append(cosine_similarity(X[i:1], X))
    print(cosine_similarity(X[i:1], X))
    i = i+1

但是,当我运行它时,我收到了这个:

(2235, 7791)
[[ 1.          0.01490594  0.11752643 ...,  0.00941571  0.03652551
   0.01239277]]
Traceback (most recent call last):
  File "...", line 83, in <module>
    similarity.append(cosine_similarity(X[i:1], X))
  File "/Users/.../anaconda/lib/python3.5/site-packages/sklearn/metrics/pairwise.py", line 881, in cosine_similarity
    X, Y = check_pairwise_arrays(X, Y)
  File "/Users/.../anaconda/lib/python3.5/site-packages/sklearn/metrics/pairwise.py", line 96, in check_pairwise_arrays
    X = check_array(X, accept_sparse='csr', dtype=dtype)
  File "/Users/.../anaconda/lib/python3.5/site-packages/sklearn/utils/validation.py", line 407, in check_array
    context))
ValueError: Found array with 0 sample(s) (shape=(0, 7791)) while a minimum of 1 is required.
[Finished in 56.466s]

【问题讨论】:

  • 您在循环中使用 X[i:1]。当 i 达到 1 时,您正在访问 X[1:1] ,它返回一个空列表。这就是导致错误的原因。
  • @DileepKumarPatchigolla 那我该怎么做呢?
  • 我不熟悉 cosine_similarity。您能否提供 X 的外观示例,以便我试用?
  • 欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。在您发布的代码中,cosine_similarity、i 和 X 未定义,因此不清楚您在做什么。
  • 您可以尝试这样来获得第一个向量与其余向量之间的余弦相似度:sklearn.metrics.pairwise.pairwise_distances(X[0:1], X, metric='cosine', n_jobs=1)。 scikit-learn.org/stable/modules/generated/… (blog.christianperone.com/2013/09/…)

标签: text machine-learning scikit-learn cosine-similarity


【解决方案1】:

尚不清楚您要达到的目标。您正在矩阵 X 的切片和整个矩阵之间进行余弦相似度。切片为空,除非 i == 0。您的 for 语句遍历矩阵,但您从不使用迭代变量 each。

余弦相似度是两个相等长度的向量之间的运算。例如,您可以使用

计算行 i 和行 j 之间的相似度
cosine_similarity(X[i], X[j])

如果您希望在列表中计算所有行间相似性,请使用列表推导:

similarity = [cosine_similarity(a, b) for a in X for b in X]

这会让你感动吗?

【讨论】:

    猜你喜欢
    • 2015-05-24
    • 1970-01-01
    • 2017-07-07
    • 2018-04-11
    • 2016-10-22
    • 2011-07-24
    • 2022-07-07
    • 1970-01-01
    相关资源
    最近更新 更多