【问题标题】:How to compute a cosine similarity in a matrix?如何计算矩阵中的余弦相似度?
【发布时间】:2019-04-22 18:01:36
【问题描述】:

我的原始数据非常大。它是关于: 数据 =

[[0, 0, 0, ......0]
 [0, 0.124, 0, ..0]
         .
         .
         .
 [0, 0, 0, 0, 0.174]]

数据2 =

[[0, 0, 0, ......0]
 [0, 0.74, 0, ..,0]
         .
         .
         .
 [0, 0, 0.15, 0, 0]]

data和data2中的10个矩阵每个矩阵有3687个值

我想计算每个矩阵的余弦相似度,这就像 data 中的第一个矩阵计算 data2 中的第一个和第二个到最后一个矩阵,依此类推我想获得 10X10 的相似度分数,我使用 sklearn 并使用 sklearn .metrics.pairwise 来拟合模型并计算余弦相似度:

import numpy as np
from sklearn import manifold
A = np.matrix(cop)
A = 1.-A
model = manifold.TSNE(metric="precomputed")
Y = model.fit_transform(A)

但它显示:

X should be a square distance matrix

我使用了一个更简单的数据作为试验,它确实适合。

如何计算余弦相似度并获得 10X10 的余弦分数?

【问题讨论】:

  • 你上面的代码中的cop到底是什么?那应该是 10x10 余弦相似度矩阵吗?
  • 对文档做lda后的概率。我有 10 个主题,每个主题有 10 个单词,我想用两个不同的 lda 的结果计算 cos。所以我为十个主题制作了一个 0 到 3687 的矩阵,因为两个不同的 lda 结合了 3687 个唯一术语并根据单词的 ID 给它们对应的概率,所以 data 和 data2 中总共有 36870 个值。矩阵中只有 10 个值是非零的,数据中总共有 100 个。发布我所有的代码会很乏味......
  • 在我下面发布的答案中,dist 是 10x10 余弦相似度矩阵。如果这就是你想要的,请忽略它下面的 TSNE 内容。
  • 如果您正在寻找其他内容,您将不得不澄清您的问题。可能您至少应该添加一个所需输入/所需输出的示例。示例输入不必是完整的 10x3687 数据集(行/列较少的简化版本很好),但它不能像当前那样包含任何点/椭圆。否则永远不会清楚你想要什么。这是一些docs for writing good example code for a question on this site

标签: python-3.x numpy scikit-learn cosine-similarity


【解决方案1】:

您的问题的确切性质取决于您的代码中的 cop 是什么。您可能需要发布一个更完整的错误代码示例才能获得好的答案。

这是使用cosine_similarityTSNE 的完整示例(带有随机数据):

import numpy as np
from sklearn import manifold
from sklearn.metrics.pairwise import cosine_similarity

data1 = np.random.rand(10,3687)
data2 = np.random.rand(10,3687)
dist = cosine_similarity(data1, data2)

model = manifold.TSNE(metric="precomputed")
Y = model.fit_transform(dist)

【讨论】:

    猜你喜欢
    • 2014-03-25
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-07
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    相关资源
    最近更新 更多