【发布时间】:2014-05-05 23:45:57
【问题描述】:
我正在构建一个电影推荐引擎,下面的代码计算相似度矩阵。
data <- read.csv('movie_test.csv')
similarity <- matrix(NA, nrow(data), nrow(data))
for (i in 1:nrow(data)) {
for (j in 1:nrow(data)) {
if (i != j) {
similarity[i, j] <- sum((data[i,] * data[j,]), na.rm = TRUE) /
(sqrt((sum(((data[i,] - data[j,] + data[j,]) * data[i,]), na.rm = TRUE))) *
sqrt((sum(((data[j,] - data[i,] + data[i,]) * data[j,]), na.rm = TRUE))))
}
}
}
对于小型数据集,这非常有效。但是对于 900 个用户和 1000 部电影来说,这无法扩展。我听说 apply 函数集运行得更快,但我怀疑它是否会扩展。有没有其他方法可以在不使用 for 循环的情况下完成上述任务?
非常感谢您的建议!!!
【问题讨论】:
-
它们并没有明显更快,只是更具可读性
-
你为什么要做
- data[j,] + data[j,]之类的事情?是忘记简化还是编码错误? -
如果有帮助,这似乎被称为“反射相关矩阵”。