如何在R中构建余弦相似度函数?

时间:2015-12-22 03:15:48

标签: r recommendation-engine cosine-similarity

这是我的action_slippers Datalist。请注意,这只是其中的一部分:

                    X_id                       cd      iios                       ui     w
1  56548c6ab65dd425cc3dda13 2015-11-24T16:12:26.572Z 194635691 563734c3b65dd40e340eaa56 0.010
2  56548df4b84c321fe4cdfb91 2015-11-24T16:19:00.798Z 194153563 56548df4b84c321fe4cdfb8f 0.010
3  56548fc7735e782a88591662 2015-11-24T16:26:46.952Z 177382028 563e12657d4c410c5832579c 0.010
4  565494e1b84c321fe4ce2f44 2015-11-24T16:48:33.828Z 177382031 563e12657d4c410c5832579c 0.010
5  5654994a735e782a88595802 2015-11-24T17:07:18.269Z 195129144 56549946735e782a885957e6 0.080
6  56549ce2b65dd425cc3e550c 2015-11-24T17:22:42.775Z 196972549 565181854c24b410e4891e11 0.010
7  56549f9bb84c321fe4ce7a3a 2015-11-24T17:34:19.732Z 194153563 56549f9bb84c321fe4ce7a37 0.010
8  5654a35a735e782a8859a055 2015-11-24T17:50:18.068Z 196258704 5654a35a735e782a8859a053 0.010
9  5654a5bab8e3a9227cffd593 2015-11-24T18:00:26.102Z 194907960 56320e0e55e89c3e14e26d3d 0.010
10 5654a7bb735e782a8859c495 2015-11-24T18:08:59.476Z 196950156 5651b53fec231f1df8482d23 0.027

iios:项目的唯一ID。这是将这些文件中的项目与项目文件相关联的字段。

ui:用户的唯一ID。

w:0.01表示用户查看了该项目。 0.08表示用户将项目添加到购物车,0.027表示购买。

我想要对这个数据列表做的是在购买时构建一个函数(w = 0.027),该函数应该排序前8位用户,该用户与使用余弦相似度公式购买项目的用户最相似(w = 0.027) )

到目前为止,我已经尝试过这些代码,但是无法获得购买用户的向量与其他用户进行比较:

user_sim=function(i,actions_slippers){

for (i in 1:nrow(actions_slippers)) {

if (actions_slippers$w[i]==0.027) {


  for (j in 1:i) {
    user_id=actions_slippers$ui[i]
    mydf <- data.frame(
      ui = c(actions_slippers$ui[1:i]),
      w = c(actions_slippers$w[1:i]),
      iios = factor(
        c(actions_slippers$iios[1:i]),
        levels = unique(x)))

  action=  dcast(mydf, formula = ui ~ iios, 
          fill = 0, value.var = "w", 
          fun.aggregate = sum, drop = FALSE)


  p=as.vector(cosine(t(a[,2:ncol(a)]))[,1])
  t=a[,-1]
  u_sim=t*p
  col_sum=colSums(u_sim)
  t_sum=colSums(t)
  res1=col_sum/t_sum
  newdata1=data.frame(res1)
  max1 <- newdata1[order(res1[1:8],decreasing=TRUE),]




  }

}
}    
}

我使用reshape2包来获取如下所示的操作数据框。我的问题是我无法获得购买的用户矢量,然后需要计算购买物品的每个用户的余弦相似度。

在我的代码中,我根据下面每行之间的第一行动作数据帧计算余弦相似度,但正如我上面提到的,我需要获得购买用户的向量并根据每个用户之间的此向量计算余弦相似度

  ui 194635691 194153563 177382028 177382031 195129144 196972549 196258704 194907960 196950156 194139014 153444738 192982501 192891196
1 237      0.01      0.01      0.01      0.00      0.00      0.00      0.00      0.01     0.000         0         0         0         0
2 261      0.01      0.00      0.00      0.00      0.00      0.00      0.00      0.00     0.000         0         0         0         0
3 290      0.00      0.00      0.01      0.01      0.00      0.00      0.00      0.00     0.000         0         0         0         0
4 483      0.00      0.00      0.00      0.00      0.00      0.01      0.00      0.00     0.000         0         0         0         0
5 485      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00     0.027         0         0         0         0
6 533      0.00      0.01      0.00      0.00      0.00      0.00      0.00      0.00     0.000         0         0         0         0
7 534      0.00      0.00      0.00      0.00      0.01      0.00      0.00      0.00     0.000         0         0         0         0
8 535      0.00      0.01      0.00      0.00      0.00      0.00      0.00      0.00     0.000         0         0         0         0
9 536      0.00      0.00      0.00      0.00      0.00      0.00      0.01      0.00     0.000         0         0         0         0

谁能告诉我怎么办? 非常感谢。

0 个答案:

没有答案