我正在尝试对“用户项评级”数据运行协作过滤(CF)算法。我的数据采用长格式,即每行都有用户对特定项目进行评级的数据。在我可以对其应用CF算法之前,我需要将其转换为“用户项”矩阵。
我正在使用spread
包中的tidyr
函数执行此任务。但鉴于我有超过5万个独特的项目,结果数据框将是巨大的。 R无法执行此操作(在我的本地计算机上)并抛出“无法分配大小的向量”错误。
处理这个问题的最佳方法是什么?我试过探索的一些选项,但无法让它们起作用:
recommenderlab
是否有选项可以解决这个问题。但我看不出任何选择。非常感谢任何帮助。
谢谢!
答案 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))
)