Surprise est un scikit Python permettant de créer et d'analyser des systèmes de recommandation traitant de données de notation explicites.
Surprise a été conçu avec les objectifs suivants à l'esprit :
Le nom SurPRISE (en gros :) ) signifie Simple Python RecommendatIon System Engine .
Veuillez noter que surprise ne prend pas en charge les évaluations implicites ou les informations basées sur le contenu.
Voici un exemple simple montrant comment vous pouvez (télécharger) charger un ensemble de données, le diviser pour une validation croisée en 5 fois et calculer le MAE et le RMSE de l'algorithme SVD.
from surprise import SVD
from surprise import Dataset
from surprise . model_selection import cross_validate
# Load the movielens-100k dataset (download it if needed).
data = Dataset . load_builtin ( 'ml-100k' )
# Use the famous SVD algorithm.
algo = SVD ()
# Run 5-fold cross-validation and print results.
cross_validate ( algo , data , measures = [ 'RMSE' , 'MAE' ], cv = 5 , verbose = True )
Sortir :
Evaluating RMSE, MAE of algorithm SVD on 5 split(s).
Fold 1 Fold 2 Fold 3 Fold 4 Fold 5 Mean Std
RMSE (testset) 0.9367 0.9355 0.9378 0.9377 0.9300 0.9355 0.0029
MAE (testset) 0.7387 0.7371 0.7393 0.7397 0.7325 0.7375 0.0026
Fit time 0.62 0.63 0.63 0.65 0.63 0.63 0.01
Test time 0.11 0.11 0.14 0.14 0.14 0.13 0.02
Surprise peut faire bien plus (par exemple, GridSearchCV) ! Vous trouverez plus d'exemples d'utilisation dans la documentation .
Voici le RMSE moyen, le MAE et le temps d'exécution total de divers algorithmes (avec leurs paramètres par défaut) sur une procédure de validation croisée 5 fois. Les ensembles de données sont les ensembles de données Movielens 100k et 1M. Les plis sont les mêmes pour tous les algorithmes. Toutes les expériences sont exécutées sur un ordinateur portable équipé d'un processeur Intel i5 de 11e génération à 2,60 GHz. Le code permettant de générer ces tables se trouve dans l'exemple de référence.
Objectif cinéma 100k | RMSE | MAE | Temps |
---|---|---|---|
SVD | 0,934 | 0,737 | 0:00:06 |
SVD++ (cache_ratings=False) | 0,919 | 0,721 | 0:01:39 |
SVD++ (cache_ratings=Vrai) | 0,919 | 0,721 | 0:01:22 |
NMF | 0,963 | 0,758 | 0:00:06 |
Pente un | 0,946 | 0,743 | 0:00:09 |
k-NN | 0,98 | 0,774 | 0:00:08 |
K-NN centré | 0,951 | 0,749 | 0:00:09 |
k-NN Base de référence | 0,931 | 0,733 | 0:00:13 |
Co-clustering | 0,963 | 0,753 | 0:00:06 |
Référence | 0,944 | 0,748 | 0:00:02 |
Aléatoire | 1.518 | 1.219 | 0:00:01 |
Objectif cinéma 1M | RMSE | MAE | Temps |
---|---|---|---|
SVD | 0,873 | 0,686 | 0:01:07 |
SVD++ (cache_ratings=False) | 0,862 | 0,672 | 0:41:06 |
SVD++ (cache_ratings=Vrai) | 0,862 | 0,672 | 0:34:55 |
NMF | 0,916 | 0,723 | 0:01:39 |
Pente un | 0,907 | 0,715 | 0:02:31 |
k-NN | 0,923 | 0,727 | 0:05:27 |
K-NN centré | 0,929 | 0,738 | 0:05:43 |
k-NN Base de référence | 0,895 | 0,706 | 0:05:55 |
Co-clustering | 0,915 | 0,717 | 0:00:31 |
Référence | 0,909 | 0,719 | 0:00:19 |
Aléatoire | 1.504 | 1.206 | 0:00:19 |
Avec pip (vous aurez besoin d'un compilateur C. Les utilisateurs de Windows préféreront peut-être utiliser conda) :
$ pip install scikit-surprise
Avec conda :
$ conda install -c conda-forge scikit-surprise
Pour la dernière version, vous pouvez également cloner le dépôt et créer la source (vous aurez d'abord besoin de Cython et numpy) :
$ git clone https://github.com/NicolasHug/surprise.git
$ cd surprise
$ pip install .
Ce projet est sous licence BSD 3-Clause, il peut donc être utilisé pour à peu près tout, y compris les applications commerciales.
J'aimerais savoir en quoi Surprise vous est utile. N'hésitez pas à ouvrir un ticket et à décrire comment vous l'utilisez !
Veuillez vous assurer de citer l'article si vous utilisez Surprise pour votre recherche :
@article{Hug2020,
doi = {10.21105/joss.02174},
url = {https://doi.org/10.21105/joss.02174},
year = {2020},
publisher = {The Open Journal},
volume = {5},
number = {52},
pages = {2174},
author = {Nicolas Hug},
title = {Surprise: A Python library for recommender systems},
journal = {Journal of Open Source Software}
}
Les personnes suivantes ont contribué à Surprise :
ashtou, Abhishek Bhatia, bobbyinfj, caoyi, Chieh-Han Chen, Raphael-Dayan, Олег Демиденко, Charles-Emmanuel Dias, dmamylin, Lauriane Ducasse, Marc Feger, franckjay, Lukas Galke, Tim Gates, Pierre-François Gimenez, Zachary Glassman, Jeff Hale, Nicolas Hug, Janniks, jyesawtellrickson, Doruk Kilitcioglu, Ravi Raju Krishna, lapidshay, Hengji Liu, Ravi Makhija, Maher Malaeb, Manoj K, James McNeilis, Naturale0, nju-luke, Pierre-Louis Pécheux, Jay Qi, Lucas Rebscher, Craig Rodrigues, Skywhat, Hercules Smith , David Stevens, Vesna Tanko, TrWestdoor, Victor Wang, Mike Lee Williams, Jay Wong, Chenchen Xu, YaoZh1918.
Merci beaucoup :) !
À partir de la version 1.1.0 (septembre 2019), je maintiendrai uniquement le package, fournirai des corrections de bugs et peut-être parfois des améliorations de performances. J'ai moins de temps à y consacrer maintenant, donc je ne suis pas en mesure d'envisager de nouvelles fonctionnalités.
Pour les bugs, problèmes ou questions concernant Surprise, évitez de m'envoyer des e-mails ; je ne pourrai probablement pas répondre). Veuillez plutôt utiliser la page du projet GitHub, afin que d'autres puissent également en bénéficier.