Ozg*_*kın 1 r cosine-similarity
这是我的数据框:
ui 194635691 194153563 177382028 177382031 195129144 196972549 196258704 194907960 196950156 194139014 153444738
1 56320e0e55e89c3e14e26d3d 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.000 0 0
2 563734c3b65dd40e340eaa56 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.000 0 0
3 563e12657d4c410c5832579c 0.00 0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.000 0 0
4 565181854c24b410e4891e11 0.00 0.00 0.00 0.00 0.00 0.01 0.00 0.00 0.000 0 0
5 5651b53fec231f1df8482d23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.027 0 0
6 56548df4b84c321fe4cdfb8f 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.000 0 0
7 56549946735e782a885957e6 0.00 0.00 0.00 0.00 0.08 0.00 0.00 0.00 0.000 0 0
8 56549f9bb84c321fe4ce7a37 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.000 0 0
9 5654a35a735e782a8859a053 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.00 0.000 0 0
Run Code Online (Sandbox Code Playgroud)
我在这里想做的是计算 useridvector 和数据帧 a 的每一行之间的余弦相似度,但没有第一列(ui) 到目前为止我已经尝试过以下代码:
user_id=actions_slippers$ui[i]#user_id is coming from another dataframe called action_slippers
useridvector=a[a$ui %in% user_id, ]
p=as.vector(cosine(t(a[,2:ncol(a)]))[,1])# this measures cosine similarity between first row of dataframe a and each other of rows from dataframe a
Run Code Online (Sandbox Code Playgroud)
但我想计算 useridvector 和没有第一列的数据帧 a 的每一行之间的余弦相似度。useridvector 看起来像这样:
ui 194635691 194153563 177382028 177382031 195129144 196972549 196258704 194907960 196950156 194139014 153444738
5651b53fec231f1df8482d23 0 0 0 0 0 0 0 0 0.027 0 0
Run Code Online (Sandbox Code Playgroud)
谁能告诉我该怎么做?
cosine{lsa}作品。我想分享我的尝试。
假设您将数据保存为dataframe:
> data
ui X194635691 X194153563 X177382028 X177382031 X195129144 X196972549 X196258704 X194907960 X196950156 X194139014 X153444738
1 56320e0e55e89c3e14e26d3d 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.000 0 0
2 563734c3b65dd40e340eaa56 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.000 0 0
3 563e12657d4c410c5832579c 0.00 0.00 0.01 0.01 0.00 0.00 0.00 0.00 0.000 0 0
4 565181854c24b410e4891e11 0.00 0.00 0.00 0.00 0.00 0.01 0.00 0.00 0.000 0 0
5 5651b53fec231f1df8482d23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.027 0 0
6 56548df4b84c321fe4cdfb8f 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.000 0 0
7 56549946735e782a885957e6 0.00 0.00 0.00 0.00 0.08 0.00 0.00 0.00 0.000 0 0
8 56549f9bb84c321fe4ce7a37 0.00 0.01 0.00 0.00 0.00 0.00 0.00 0.00 0.000 0 0
9 5654a35a735e782a8859a053 0.00 0.00 0.00 0.00 0.00 0.00 0.01 0.00 0.000 0 0
Run Code Online (Sandbox Code Playgroud)
使用data[,-1]或subset.data.frame(data, select = names(data)[-1]消除第一列,然后转换为矩阵并使用cosine{lsa}
> res <- lsa::cosine(t(as.matrix(data[, -1])))
> res
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,] 1 0 0 0 0 0 0 0 0
[2,] 0 1 0 0 0 0 0 0 0
[3,] 0 0 1 0 0 0 0 0 0
[4,] 0 0 0 1 0 0 0 0 0
[5,] 0 0 0 0 1 0 0 0 0
[6,] 0 0 0 0 0 1 0 1 0
[7,] 0 0 0 0 0 0 1 0 0
[8,] 0 0 0 0 0 1 0 1 0
[9,] 0 0 0 0 0 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
PS:安装lsa包并查看?cosine详细信息
=============================更新=====
结果矩阵就像,
user1 **user2** user3 **user4**
user1 1 0
user2 1
user3 ... 1
user4
Run Code Online (Sandbox Code Playgroud)
其中element(i,j)表示用户i和用户j之间的相似度。如果您userid有 2 个用户,即用户 2 和用户 4。那么您想要找到这 2 个用户与其他用户之间的相似性。它是整个相似度矩阵的子矩阵。然后使用 res[, c(2,4)] 获得所需的矩阵。