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},
}
The framework supports given-n and all-but-x protocols with
Available evaluation measures are
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")
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")
<- MovieLense[rowCounts(MovieLense) > 100, ]
MovieLense100 MovieLense100
## 358 x 1664 rating matrix of class 'realRatingMatrix' with 73610 ratings.
Train a user-based collaborative filtering recommender using a small training set.
<- MovieLense100[1:300]
train <- Recommender(train, method = "UBCF")
rec rec
## Recommender of type 'UBCF' for 'realRatingMatrix'
## learned using 300 users.
Create top-N recommendations for new users (users 301 and 302).
<- predict(rec, MovieLense100[301:302], n = 5)
pre 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.
<- evaluationScheme(MovieLense100, method = "cross-validation", k = 10, given = -5,
scheme 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.
<- list(`random items` = list(name = "RANDOM", param = NULL), `popular items` = list(name = "POPULAR",
algorithms param = NULL), `user-based CF` = list(name = "UBCF", param = list(nn = 3)), `item-based CF` = list(name = "IBCF",
param = list(k = 100)))
<- evaluate(scheme, algorithms, type = "topNList", n = c(1, 3, 5, 10), progress = FALSE)
results
plot(results, annotate = 2, legend = "topleft")
A simple Shiny App running recommenderlab can be found at https://mhahsler-apps.shinyapps.io/Jester/ (source code).