为协同过滤创建用户-项目矩阵

Creating a User-Item Matrix for Collaborative Filtering

我正在尝试 运行 对 "User-Item-Rating" 数据的协同过滤 (CF) 算法。我的数据是长格式的,即每一行都有用户对特定项目评分的数据。我需要先将其转换为 "User-Item" 矩阵,然后才能对其应用 CF 算法。

我正在使用 tidyr 包中的 spread 函数来完成这项任务。但考虑到我有超过 50k 个独特的项目,生成的数据框将是巨大的。 R 无法执行此操作(在我的本地计算机上)并抛出 "cannot allocate vector of size" 错误。

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

任何帮助将不胜感激。

谢谢!

当您(可能)获得稀疏数据时,请使用稀疏矩阵。这是 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))
)