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
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]. 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 = c("https://mhahsler.r-universe.dev",
"https://cloud.r-project.org/"))
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")
A simple Shiny App running recommenderlab can be found at https://mhahsler-apps.shinyapps.io/Jester/ (source code).
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.