首页 > 解决方案 > 数据框中行的余弦相似度

问题描述

我有一个数据集,其中每一列都有给定对象的不同参数的概率。第一列是一个字符串,表示对象名称,而所有其他列都有一个数值。

我正在使用“coop”包中的 cosine() 函数来查找对象之间的余弦相似度。理想情况下,我希望函数将每一行解释为一个单独的向量,并给我每个对象之间的一个单独的余弦相似度。无论我尝试了多少,我都无法做到这一点,因为该函数不接受字符串值(对象名称)作为输入。

为简单起见,假设我的数据看起来像这样(实际上它更大更复杂):

美国广播公司 0.75 0.23

xyz 0.80 0.40

jkl 0.32 0.91

我需要的最终结果是一个 3x3 矩阵,它使用数值比较 abc、xyz 和 jkl。

很确定我在这里遗漏了一些非常简单的东西,但我会很感激任何帮助。有没有办法我可以做到这一点?

标签: rdata-analysisanalysiscosine-similarity

解决方案


这是生成所需 3x3 矩阵的简单方法。

library(coop)
df = data.frame(name=c('abc', 'xyz', 'jkl'), v1=c(0.75,0.8,0.32), v2 = c(0.23,0.4, 0.91))

# make a matrix transposed with each column corresponding to the name
mm = t(as.matrix(df[,2:3]))
cosine(mm)
#          [,1]      [,2]      [,3]
#[1,] 1.0000000 0.9862394 0.5937443
#[2,] 0.9862394 1.0000000 0.7186021
#[3,] 0.5937443 0.7186021 1.0000000

推荐阅读