如何使用Recommender API在R中实现协作过滤+基线平均?

时间:2019-03-10 10:53:50

标签: r cross-validation collaborative-filtering

我需要使用内置的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

0 个答案:

没有答案