Lab for Developing and Testing Recommender Algorithms

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. Hahsler (2022) .


R package recommenderlab - Lab for Developing and Testing Recommender Algorithms

Package onCRAN CRAN RStudio mirrordownloads License r-universestatus

Maintainer: Michael Hahsler

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

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)

The SVD and LIBMF methods use the optional packages irlba and recosystem, respectively. Install them before using those methods:

install.packages(c("irlba", "recosystem"))

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 = c("https://mhahsler.r-universe.dev",
              "https://cloud.r-project.org/"))

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).

Citation request

To cite package ‘recommenderlab’ in publications use:

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},
}

References

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("recommenderlab")

1.1.0 by Michael Hahsler, 7 days ago


https://github.com/mhahsler/recommenderlab, http://michael.hahsler.net/recommenderlab/


Report a bug at https://github.com/mhahsler/recommenderlab/issues


Browse source code at https://github.com/cran/recommenderlab


Authors: Michael Hahsler [aut, cre, cph] (ORCID: , Bregt Vereet [ctb]


Documentation:   PDF Manual  


GPL-2 license


Imports registry, methods, utils, stats, matrixStats

Depends on Matrix, arules, proxy

Suggests irlba, recosystem, testthat, knitr, rmarkdown


Depended on by recommenderlabBX, recommenderlabJester.

Suggested by RMOA, cmfrec, crassmat, recometrics.


See at CRAN