【发布时间】: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