【问题标题】:Creating a User-Item Matrix for Collaborative Filtering为协同过滤创建用户项目矩阵
【发布时间】:2016-11-12 15:34:51
【问题描述】:

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

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

解决这个问题的最佳方法是什么?我尝试探索的一些选项,但无法让它们发挥作用:

  • 我在想是否有办法将传播调用的输出作为稀疏矩阵返回
  • 我还尝试探索实现 CF 的包(例如 recommenderlab)是否可以选择处理此问题。但我看不到任何选项。

任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 要快速获得更多关于 R 问题的答案,最好添加一点 reproducible example。将鼠标悬停在帖子下方的 R 标签上...

标签: r tidyr collaborative-filtering


【解决方案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))
)

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2019-04-21
    • 2016-08-24
    • 1970-01-01
    相关资源
    最近更新 更多