python - 创建余弦相似度矩阵 numpy

标签 python numpy matrix cosine-similarity

假设我有一个如下所示的 numpy 矩阵:

array([array([ 0.0072427 ,  0.00669255,  0.00785213,  0.00845336,  0.01042869]),
   array([ 0.00710799,  0.00668831,  0.00772334,  0.00777796,  0.01049965]),
   array([ 0.00741872,  0.00650899,  0.00772273,  0.00729002,  0.00919407]),
   array([ 0.00717589,  0.00627021,  0.0069514 ,  0.0079332 ,  0.01069545]),
   array([ 0.00617369,  0.00590539,  0.00738468,  0.00761699,  0.00886915])], dtype=object)

如何生成一个 5 x 5 矩阵,其中矩阵的每个索引都是原始矩阵中两个对应行的余弦相似度?

例如第 0 行第 2 列的值将是原始矩阵中第 1 行和第 3 行之间的余弦相似度。

这是我尝试过的:

from sklearn.metrics import pairwise_distances
from scipy.spatial.distance import cosine
import numpy as np

#features is a column in my artist_meta data frame
#where each value is a numpy array of 5 floating point values, similar to the
#form of the matrix referenced above but larger in volume

items_mat = np.array(artist_meta['features'].values)

dist_out = 1-pairwise_distances(items_mat, metric="cosine")

上面的代码给我以下错误:

ValueError:使用序列设置数组元素。

不确定为什么我会得到这个,因为每个数组的长度都相同 (5),我已经验证过这一点。

最佳答案

m为数组

m = np.array([
        [ 0.0072427 ,  0.00669255,  0.00785213,  0.00845336,  0.01042869],
        [ 0.00710799,  0.00668831,  0.00772334,  0.00777796,  0.01049965],
        [ 0.00741872,  0.00650899,  0.00772273,  0.00729002,  0.00919407],
        [ 0.00717589,  0.00627021,  0.0069514 ,  0.0079332 ,  0.01069545],
        [ 0.00617369,  0.00590539,  0.00738468,  0.00761699,  0.00886915]
    ])

per wikipedia: Cosine_Similarity
enter image description here

我们可以计算我们的分子

d = m.T @ m

我们的‖A‖

norm = (m * m).sum(0, keepdims=True) ** .5

那么相似点是

d / norm / norm.T

[[ 1.      0.9994  0.9979  0.9973  0.9977]
 [ 0.9994  1.      0.9993  0.9985  0.9981]
 [ 0.9979  0.9993  1.      0.998   0.9958]
 [ 0.9973  0.9985  0.998   1.      0.9985]
 [ 0.9977  0.9981  0.9958  0.9985  1.    ]]

距离是

1 - d / norm / norm.T

[[ 0.      0.0006  0.0021  0.0027  0.0023]
 [ 0.0006  0.      0.0007  0.0015  0.0019]
 [ 0.0021  0.0007  0.      0.002   0.0042]
 [ 0.0027  0.0015  0.002   0.      0.0015]
 [ 0.0023  0.0019  0.0042  0.0015  0.    ]]

关于python - 创建余弦相似度矩阵 numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41905029/

相关文章:

python - 如何在 python 中将 3D 函数绘制为 2D 颜色图?

python - 对角线(之字形)遍历坐标的索引

python - 将赤道转换为alt-az坐标非常慢

python - spaCy 模式匹配 - OR 语句

python - 寻找函数的最大值

python - 使用numpy的调色板方法

python - numpy:从复杂数据类型中确定相应的 float 数据类型

python - 来自任意级别嵌套字典的 numpy 结构化数组

mysql - 从 SQL 中的 LEFT JOIN 创建矩阵/表

c++ - 初始化二维数组 C++