3

我正在使用 R 中的 Recommenderlab 构建一个推荐系统,为新用户提供精酿啤酒建议。

但是,在运行模型时,我会收到每个用户对大部分训练数据集的相同预测,或者收到“字符(0)”作为输出。如何接收与每个用户关联且不重复的预测?

我正在使用的数据集可以在这里找到:https ://www.kaggle.com/rdoume/beerreviews/version/1

我尝试将数据框直接转换为矩阵,然后转换为 realRatingMatrix。

为了获得任何建议,我需要在将数据框转换为矩阵之前使用 data.table 库中的“dcast”函数。

我还尝试从矩阵中删除第一列以删除用户 ID。

需要注意的一点是,在对数据进行采样时,可能有几行“reviewer”为空白,但评分和啤酒 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" 

任何帮助是极大的赞赏。

4

0 回答 0