我需要使用内置的Recommender API在R中实现以下项项协作过滤算法,该API甚至可以在较大的数据集(如MovieLens数据集)上使用。
电影平均值+(Σ(相似电影评分-相似电影平均值)*中心余弦相似度)/Σ中心余弦相似度
使用此算法,我想预测使用交叉验证创建的所有用户的1/5的随机测试数据集中的所有评分。
虽然我设法为R编写了一个R代码,但它在包含25个用户和100部电影的小型数据集上效果很好,而当我在包含约9724部电影的Movie Lens数据集上尝试使用R代码时,我却无法进行计算皮尔逊相关矩阵本身。
我确实在rrecsys软件包中找到了功能,以实现项目项协同过滤或基线平均,但不能同时实现两者!
任何帮助将不胜感激!
for(user in 1:ncol(test1)){
for(movie in 1:nrow(test1)){
NN_indices <- ordered_similar_movies(movie,train1_index)
similarities <- sim_mat[NN_indices,movie]
similarities <- similarities[similarities >=0.3 & !is.na(similarities)]
KNN_indices <- sim_mat[NN_indices,movie] %in% similarities
KNN <- NN_indices[KNN_indices]
selected_ratings <- ratings[KNN,this_user+1]
rated_movies <- which(!is.na(selected_ratings))
rated_highest_similarities_indices <- KNN[rated_movies]
rated_highest_similarities <- sim_mat[rated_highest_similarities_indices,movie]
selected_ratings <- selected_ratings[rated_movies]
avg_movie_rating <- rowMeans(train1[movie,],na.rm = TRUE)
prediction1[movie,user] <- avg_movie_rating + (
rated_highest_similarities %*% (selected_ratings - movie_means[rated_movies]))
/sum(rated_highest_similarities) }}
相关性计算代码:
sim_mat <- sapply(1:100,function(i){
sapply(1:100,function(j){
cor(unlist(train1[i,]),unlist(train1[j,]),use = "complete.obs",method = c("pearson"))
})
})
预先感谢!
Anish Sah