Assignment 11 Personalized Recommender Approach

CodeBase

library(recommenderlab)
Warning: package 'recommenderlab' was built under R version 4.5.3
Loading required package: Matrix
Loading required package: arules
Warning: package 'arules' was built under R version 4.5.3

Attaching package: 'arules'
The following objects are masked from 'package:base':

    abbreviate, write
Loading required package: proxy

Attaching package: 'proxy'
The following object is masked from 'package:Matrix':

    as.matrix
The following objects are masked from 'package:stats':

    as.dist, dist
The following object is masked from 'package:base':

    as.matrix
library(readxl)
Warning: package 'readxl' was built under R version 4.5.3

Data setup

raw_data <- read_excel("MovieRatings.xlsx")
movie_matrix <- as.matrix(raw_data[, -1]) 
rownames(movie_matrix) <- raw_data$Critic

#Converting to better format for recommending
rating_matrix <- as(movie_matrix, "realRatingMatrix")

Creating a user base collaborative filtering model that uses cosine similarity

#Creating the recommender model
rec_model <- Recommender(rating_matrix, 
  method = "UBCF", 
  parameter = list(method = "Cosine", nn = 3))

#Generating prediction rating 
recom_predictions <- predict(rec_model, rating_matrix, type = "ratings")

#Generating Top 3 Recommendation
recom_list <- predict(rec_model, rating_matrix, n = 3)

#Evalutating the model

eval_sets <- evaluationScheme(rating_matrix, 
                              method = "split", 
                              train = 0.8, 
                              given = 1, #Number of ratings to hold for test
                              goodRating = 4)

#Train model on training set
eval_recommender <- Recommender(getData(eval_sets, "train"), "UBCF")

#Prediction on the test set
eval_prediction <- predict(eval_recommender, getData(eval_sets, "known"), type = "ratings")

# Calculate the error metrics
accuracy_results <- calcPredictionAccuracy(eval_prediction, getData(eval_sets, "unknown"))
print(accuracy_results)
RMSE  MSE  MAE 
 NaN  NaN  NaN 

Viewing personalized predictions for users

as(recom_list, "list")
$`0`
[1] "Deadpool"

$`1`
character(0)

$`2`
[1] "JungleBook"

$`3`
[1] "PitchPerfect2" "JungleBook"    "Frozen"       

$`4`
[1] "Deadpool"   "JungleBook"

$`5`
[1] "StarWarsForce" "Deadpool"     

$`6`
character(0)

$`7`
[1] "Deadpool"   "JungleBook"

$`8`
[1] "PitchPerfect2" "JungleBook"   

$`9`
character(0)

$`10`
[1] "PitchPerfect2"

$`11`
[1] "CaptainAmerica" "Deadpool"       "PitchPerfect2" 

$`12`
character(0)

$`13`
[1] "Deadpool"   "JungleBook"

$`14`
[1] "StarWarsForce"

$`15`
[1] "Deadpool"       "CaptainAmerica" "StarWarsForce" 
predicted_mat <- as(recom_predictions, "matrix")
round(predicted_mat, 2)
          CaptainAmerica Deadpool Frozen JungleBook PitchPerfect2 StarWarsForce
Burton                NA     4.00     NA         NA            NA            NA
Charley               NA       NA     NA         NA            NA            NA
Dan                   NA       NA     NA       5.00            NA            NA
Dieudonne             NA       NA    3.8       4.17          4.31            NA
Matt                  NA     3.64     NA       2.65            NA            NA
Mauricio              NA     3.39     NA         NA            NA          4.39
Max                   NA       NA     NA         NA            NA            NA
Nathan                NA     4.00     NA       4.00            NA            NA
Param                 NA       NA     NA       3.00          3.11            NA
Parshu                NA       NA     NA         NA            NA            NA
Prashanth             NA       NA     NA         NA          3.13            NA
Shipra              4.26     3.78     NA         NA          2.33            NA
Sreejaya              NA       NA     NA         NA            NA            NA
Steve                 NA     4.00     NA       4.00            NA            NA
Vuthy                 NA       NA     NA         NA            NA          4.29
Xingjia             5.50     6.50     NA         NA          3.50          4.83