Learn R Programming

R package recommenderlab - Lab for Developing and Testing Recommender Algorithms

Introduction

Provides a research infrastructure to develop and evaluate collaborative filtering recommender algorithms. This includes a sparse representation for user-item matrices, many popular algorithms, top-N recommendations, and cross-validation. The package supports rating (e.g., 1-5 stars) and unary (0-1) data sets.

The following R packages use recommenderlab: cmfrec, crassmat, recometrics, recommenderlabBX, recommenderlabJester, RMOA

Please cite the use of this package as:

Hahsler M (2022). “recommenderlab: An R Framework for Developing and Testing Recommendation Algorithms.” arXiv:2205.12371 [cs.IR]. doi:10.48550/ARXIV.2205.12371 https://doi.org/10.48550/ARXIV.2205.12371.

@Misc{,
  title = {recommenderlab: An R Framework for Developing and Testing Recommendation Algorithms},
  author = {Michael Hahsler},
  year = {2022},
  doi = {10.48550/ARXIV.2205.12371},
  howpublished = {arXiv:2205.12371 [cs.IR]},
  month = {May},
}

Supported algorithms

Recommender algorithm

  • User-based collaborative filtering (UBCF)
  • Item-based collaborative filtering (IBCF)
  • SVD with column-mean imputation (SVD)
  • Funk SVD (SVDF)
  • Alternating Least Squares (ALS)
  • Matrix factorization with LIBMF (LIBMF)
  • Association rule-based recommender (AR)
  • Popular items (POPULAR)
  • Randomly chosen items for comparison (RANDOM)
  • Re-recommend liked items (RERECOMMEND)
  • Hybrid recommendations (HybridRecommender)

Recommender Evaluation

The framework supports given-n and all-but-x protocols with

  • Train/test split
  • Cross-validation
  • Repeated bootstrap sampling

Available evaluation measures are

  • Rating errors: MSE, RMSE, MAE
  • Top-N recommendations: TPR/FPR (ROC), precision and recall

Installation

Stable CRAN version: Install from within R with

install.packages("recommenderlab")

Current development version: Install from r-universe.

install.packages("recommenderlab", repos = "https://mhahsler.r-universe.dev")

Usage

Load the package and prepare a dataset (included in the package). The MovieLense data contains user ratings for movies on a 1 to 5 star scale. We only use here users with more than 100 ratings.

set.seed(1234)

library("recommenderlab")
data("MovieLense")

MovieLense100 <- MovieLense[rowCounts(MovieLense) > 100, ]
MovieLense100
## 358 x 1664 rating matrix of class 'realRatingMatrix' with 73610 ratings.

Train a user-based collaborative filtering recommender using a small training set.

train <- MovieLense100[1:300]
rec <- Recommender(train, method = "UBCF")
rec
## Recommender of type 'UBCF' for 'realRatingMatrix' 
## learned using 300 users.

Create top-N recommendations for new users (users 301 and 302).

pre <- predict(rec, MovieLense100[301:302], n = 5)
pre
## Recommendations as 'topNList' with n = 5 for 2 users.
as(pre, "list")
## $`0`
## [1] "Amistad (1997)"                    "Kama Sutra: A Tale of Love (1996)"
## [3] "Farewell My Concubine (1993)"      "Roommates (1995)"                 
## [5] "Fresh (1994)"                     
## 
## $`1`
## [1] "Bitter Moon (1992)"         "Touch of Evil (1958)"      
## [3] "Braindead (1992)"           "Great Dictator, The (1940)"
## [5] "M (1931)"

Use a 10-fold cross-validation scheme to compare the top-N lists of several algorithms. Movies with 4 or more stars are considered a good recommendation. We plot true negative vs. true positive rate for top-N lists of different lengths.

scheme <- evaluationScheme(MovieLense100, method = "cross-validation", k = 10, given = -5,
    goodRating = 4)
scheme
## Evaluation scheme using all-but-5 items
## Method: 'cross-validation' with 10 run(s).
## Good ratings: >=4.000000
## Data set: 358 x 1664 rating matrix of class 'realRatingMatrix' with 73610 ratings.
algorithms <- list(`random items` = list(name = "RANDOM", param = NULL), `popular items` = list(name = "POPULAR",
    param = NULL), `user-based CF` = list(name = "UBCF", param = list(nn = 3)), `item-based CF` = list(name = "IBCF",
    param = list(k = 100)))

results <- evaluate(scheme, algorithms, type = "topNList", n = c(1, 3, 5, 10), progress = FALSE)

plot(results, annotate = 2, legend = "topleft")

Shiny App

A simple Shiny App running recommenderlab can be found at https://mhahsler-apps.shinyapps.io/Jester/ (source code).

References

Copy Link

Version

Install

install.packages('recommenderlab')

Monthly Downloads

3,962

Version

1.0.6

License

GPL-2

Issues

Pull Requests

Stars

Forks

Maintainer

Last Published

September 20th, 2023

Functions in recommenderlab (1.0.6)

predict

Predict Recommendations
sparseNAMatrix-class

Sparse Matrix Representation With NAs Not Explicitly Stored
realRatingMatrix

Class "realRatingMatrix": Real-valued Rating Matrix
topNList

Class "topNList": Top-N List
evaluationScheme-class

Class "evaluationScheme": Evaluation Scheme
ratingMatrix

Class "ratingMatrix": Virtual Class for Rating Data
evaluationResults-class

Class "evaluationResults": Results of the Evaluation of a Single Recommender Method
HybridRecommender

Create a Hybrid Recommender
MSWeb

Anonymous web data from www.microsoft.com
calcPredictionAccuracy

Calculate the Prediction Error for a Recommendation
binaryRatingMatrix

Class "binaryRatingMatrix": A Binary Rating Matrix
Jester5k

Jester dataset (5k sample)
Recommender-class

Class "Recommender": A Recommender Model
dissimilarity

Dissimilarity and Similarity Calculation Between Rating Data
MovieLense

MovieLense Dataset (100k)
evaluationScheme

Creator Function for evaluationScheme
normalize

Normalize the ratings
funkSVD

Funk SVD for Matrices with Missing Data
evaluate

Evaluate a Recommender Models
plot

Plot Evaluation Results
Recommender

Create a Recommender Model
Error

Error Calculation
evaluationResultList-class

Class "evaluationResultList": Results of the Evaluation of a Multiple Recommender Methods
getList

List and Data.frame Representation for Recommender Matrix Objects
internalFunctions

Internal Utility Functions