【发布时间】:2014-11-30 05:14:03
【问题描述】:
我正在执行一项任务,我正在尝试为 Netflix 奖品数据构建一个协作过滤模型。我使用的数据在一个 CSV 文件中,我很容易将它导入到数据框中。现在我需要做的是创建一个由用户作为行和电影作为列的稀疏矩阵,并且每个单元格都由相应的评级值填充。当我尝试绘制数据框中的值时,我需要为数据框中的每一行运行一个循环,这在 R 中花费了大量时间,请任何人提出更好的方法。以下是示例代码和数据:
buildUserMovieMatrix <- function(trainingData)
{
UIMatrix <- Matrix(0, nrow = max(trainingData$UserID), ncol = max(trainingData$MovieID), sparse = T);
for(i in 1:nrow(trainingData))
{
UIMatrix[trainingData$UserID[i], trainingData$MovieID[i]] = trainingData$Rating[i];
}
return(UIMatrix);
}
从中创建稀疏矩阵的数据框中的数据样本:
MovieID UserID Rating
1 1 2 3
2 2 3 3
3 2 4 4
4 2 6 3
5 2 7 3
所以最后我想要这样的东西: 列是电影 ID,行是用户 ID
1 2 3 4 5 6 7
1 0 0 0 0 0 0 0
2 3 0 0 0 0 0 0
3 0 3 0 0 0 0 0
4 0 4 0 0 0 0 0
5 0 0 0 0 0 0 0
6 0 3 0 0 0 0 0
7 0 3 0 0 0 0 0
所以解释是这样的:用户 2 将电影 1 评为 3 星,用户 3 将电影 2 评为 3 星,以此类推其他用户和电影。我的数据框中大约有 8500000 行,我的代码只需要大约 30-45 分钟来创建这个用户项矩阵,我想得到任何建议
【问题讨论】:
标签: r machine-learning sparse-matrix