在 R 中找到最高的余弦相似度

Find highest Cosine Similarity in R

我已经计算了推文的余弦相似度,我已经将其输入 my_matrix。现在我想获得最高的相似度分数。

cos = cosine(my_matrix)
cos

cos 给了我一个包含所有值的矩阵数组。输出如下所示:

           1         2         3         4         5         6         7         8
1  1.0000000  0.5568073  0.3901539  0.5621206  0.2816833  0.2160066  0.2605051  0.2115766
2  0.5568073  1.0000000  0.6526458  0.7140950  0.4307470  0.3033117  0.2941557  0.3437280
3  0.3901539  0.6526458  1.0000000  0.5650099  0.3252116  0.2494666  0.2453746  0.3903765
4  0.5621206  0.7140950  0.5650099  1.0000000  0.4033797  0.2911018  0.3459270  0.3239339
5  0.2816833  0.4307470  0.3252116  0.4033797  1.0000000  0.2501818  0.1925585  0.1905618
6  0.2160066  0.3033117  0.2494666  0.2911018  0.2501818  1.0000000  0.1378479  0.2054312
7  0.2605051  0.2941557  0.2453746  0.3459270  0.1925585  0.1378479  1.0000000  0.1320529
8  0.2115766  0.3437280  0.3903765  0.3239339  0.1905618  0.2054312  0.1320529  1.0000000
9  0.4836184  0.6940823  0.5820808  0.7131646  0.4122365  0.2808218  0.3132991  0.3311042
10 0.3097645  0.3486836  0.2695222  0.3268555  0.1954665  0.1239200  0.1436308  0.1333930

现在我想遍历这个矩阵并从这个矩阵中获取最大值,除了 1(因为第 1 行和第 1 列 = 1,第 2 行和第 2 列 = 2...)。

我想在这个例子中得到的输出是第 4 行和第 2 列的 0.7140950,因为它是 1 之后的第二大值。到目前为止,我已经尝试了一个双 for 循环,以迭代在行和列上,但这根本不起作用,我不知道如何继续。

biggest_value = 0 

for(row in 1:nrow(party_m)) {
  for(col in 1:ncol(party_m)) {
        if(my_matrix[row, col] > biggest_value ){
           biggest_value = my_matriy[row,col]
        }
  }
}

有人对此有解决方案吗?

diag(cos) <- 0

which(cos == max(cos), arr.ind = TRUE)

请注意,由于您的矩阵是对称的,因此您将获得几个最大值,例如第 4 行第 2 列和第 2 行第 4 列。

您可以先将上三角设置为缺失以防止出现这种情况:

cos[upper.tri(cos, diag = TRUE)] <- NA

然后使用which函数。

您的代码可能无法正常工作,因为您打错了 biggest_value = my_matriy[row,col],而不是 biggest_value = my_matrix[row,col],尽管我 运行 还没有找到答案。

如评论中所述,可以将矩阵的对角线元素设置为0,然后确定矩阵中的最大值。您没有任何负值,但一般来说,如果需要最强的关联,您可能更愿意获得最大绝对值。要查找哪对产生这些值,请使用 ?which。考虑:

diag(cos) <- 0 
max(cos)
# [1] 0.714095
which(cos==max(cos), arr.ind=TRUE) 
#      row col
# [1,]   4   2
# [2,]   2   4