我正在R中使用Recommenderlab构建推荐系统,以向新用户提供手工啤酒建议。
但是,在运行模型时,我对大多数训练数据集的每个用户都收到相同的预测,或者将'character(0)'作为输出。如何接收与每个用户相关联且没有重复的预测?
我正在使用的数据集可以在这里找到:https://www.kaggle.com/rdoume/beerreviews/version/1
我尝试将数据帧直接转换为矩阵,然后转换为realRatingMatrix。
为了接收任何建议,我需要在将数据帧转换为矩阵之前使用data.table库中的'dcast'函数。
我还尝试过从矩阵中删除第一列以删除用户ID。
要注意的一件事是,在对数据进行采样时,可能会有几行“审阅者”为空白,但评分和啤酒ID在那里。
library(dplyr)
library(tidyverse)
library(recommenderlab)
library(reshape2)
library(data.table)
beer <- read.csv('beer.csv', stringsAsFactors = FALSE)
#Take sample of data(1000)
beer_sample <- sample_n(beer, 1000)
#Select relevant columns & rename
beer_ratings <- select(beer_sample, reviewer = review_profilename, beerId = beer_beerid, rating = review_overall)
#Add unique id for reviewers
beer_ratings$userId <- group_indices_(beer_ratings, .dots = 'reviewer')
#Create ratings matrix
rating_matrix <- dcast(beer_ratings, userId ~ beerId, value.var = 'rating')
rating_matrix <- as.matrix(rating_matrix)
rating_matrix <- as(rating_matrix, 'realRatingMatrix')
#UBCF Model
recommender_model <- Recommender(rating_matrix, method = 'UBCF', param=list(method='Cosine',nn=10))
#Predict top 5 beers for first 10 users
recom <- predict(recommender_model, rating_matrix[1:10], n=5)
#Return top recommendations as a list
recom_list<- as(recom,'list')
recom_list
上面的代码将导致:
[[1]]
[1] "48542" "2042" "6" "10" "19"
[[2]]
[1] "10277" "2042" "6" "10" "19"
[[3]]
[1] "10277" "48542" "6" "10" "19"
[[4]]
[1] "10277" "48542" "2042" "6" "10"
[[5]]
[1] "10277" "48542" "2042" "6" "10"
[[6]]
[1] "10277" "48542" "2042" "6" "10"
将数据帧转换为矩阵,然后将realRatingMatrix转换为矩阵而不先转换为表,会导致用户的建议为:
`886093`
`character(0)`
首先使用“ dcast”功能,然后将数据帧转换为矩阵并删除第一列,然后转换为realRatingMatrix,几乎对每个用户都返回相同的预测:
[[1]]
[1] "6" "7" "10" "12" "19"
[[2]]
[1] "6" "7" "10" "12" "19"
[[3]]
[1] "6" "7" "10" "12" "19"
任何帮助将不胜感激。