为协作过滤创建用户项矩阵

时间:2016-11-12 15:34:52

标签: r tidyr collaborative-filtering

我正在尝试对“用户项评级”数据运行协作过滤(CF)算法。我的数据采用长格式,即每行都有用户对特定项目进行评级的数据。在我可以对其应用CF算法之前,我需要将其转换为“用户项”矩阵。

我正在使用spread包中的tidyr函数执行此任务。但鉴于我有超过5万个独特的项目,结果数据框将是巨大的。 R无法执行此操作(在我的本地计算机上)并抛出“无法分配大小的向量”错误。

处理这个问题的最佳方法是什么?我试过探索的一些选项,但无法让它们起作用:

  • 我在想是否有办法将传播调用的输出作为稀疏矩阵
  • 返回
  • 我也试过探索实现CF的包,如recommenderlab是否有选项可以解决这个问题。但我看不出任何选择。

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

当您(可能)获得稀疏数据时,请使用稀疏矩阵。以下是50000稀疏示例评级的示例:

library(stringi)
library(Matrix)
set.seed(1)
df <- data.frame(item = stri_rand_strings(50000, 4))
df$user <- as.factor(1:nrow(df))
df$rating <- sample(1:10, nrow(df), T)
m <- sparseMatrix(
  i = as.integer(df$user), 
  j = as.integer(df$item), 
  x = df$rating, 
  dimnames = list(levels(df$user), levels(df$item))
)