Recommenderlab: получение повторяющихся прогнозов для нескольких пользователей - PullRequest
0 голосов
/ 11 февраля 2019

Я использую Recommenderlab в R, чтобы создать систему рекомендаций, чтобы предлагать новые варианты для новых пользователей.

Однако после запуска модели я получаю те же прогнозы для каждого пользователя для большинства наборов обучающих данных, либо получаю символ (0) в качестве выходных данных.Как я могу получить прогнозы, которые связаны с каждым пользователем и не дублируются?

Набор данных, который я использую, можно найти здесь: https://www.kaggle.com/rdoume/beerreviews/version/1

Я попытался преобразоватьфрейм данных непосредственно в матрицу, затем в realRatingMatrix.

Чтобы получить какие-либо рекомендации, мне нужно использовать функцию dcast из библиотеки data.table перед преобразованием фрейма данных в матрицу.

Я также попытался удалить первый столбец из матрицы, чтобы удалить идентификаторы пользователя.

Следует отметить, что при выборке данных может быть несколько строк, в которых «рецензент»'пусто, но рейтинг и идентификатор пива есть.

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" 

Любая помощь очень ценится.

...