在 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
我已经计算了推文的余弦相似度,我已经将其输入 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