Surprise ist ein Python-Scikit zum Erstellen und Analysieren von Empfehlungssystemen, die explizite Bewertungsdaten verarbeiten.
Surprise wurde mit folgenden Zielen entwickelt :
Der Name SurPRISE (ungefähr :)) steht für Simple Python RecommendatIon System Engine .
Bitte beachten Sie, dass Surprise keine impliziten Bewertungen oder inhaltsbasierten Informationen unterstützt.
Hier ist ein einfaches Beispiel, das zeigt, wie Sie einen Datensatz (herunterladen), ihn für eine 5-fache Kreuzvalidierung aufteilen und den MAE und RMSE des SVD-Algorithmus berechnen können.
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 )
Ausgabe :
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 kann noch viel mehr (z. B. GridSearchCV)! Weitere Anwendungsbeispiele finden Sie in der Dokumentation.
Hier sind die durchschnittliche RMSE-, MAE- und Gesamtausführungszeit verschiedener Algorithmen (mit ihren Standardparametern) bei einem 5-fachen Kreuzvalidierungsverfahren aufgeführt. Bei den Datensätzen handelt es sich um die Movielens 100k- und 1M-Datensätze. Die Faltungen sind für alle Algorithmen gleich. Alle Experimente werden auf einem Laptop mit einem Intel i5 der 11. Generation mit 2,60 GHz durchgeführt. Den Code zum Generieren dieser Tabellen finden Sie im Benchmark-Beispiel.
Filmobjektiv 100k | RMSE | MAE | Zeit |
---|---|---|---|
SVD | 0,934 | 0,737 | 0:00:06 |
SVD++ (cache_ratings=False) | 0,919 | 0,721 | 0:01:39 |
SVD++ (cache_ratings=True) | 0,919 | 0,721 | 0:01:22 |
NMF | 0,963 | 0,758 | 0:00:06 |
Steigung eins | 0,946 | 0,743 | 0:00:09 |
k-NN | 0,98 | 0,774 | 0:00:08 |
Zentriertes k-NN | 0,951 | 0,749 | 0:00:09 |
k-NN-Basislinie | 0,931 | 0,733 | 0:00:13 |
Co-Clustering | 0,963 | 0,753 | 0:00:06 |
Grundlinie | 0,944 | 0,748 | 0:00:02 |
Zufällig | 1.518 | 1.219 | 0:00:01 |
Filmobjektiv 1M | RMSE | MAE | Zeit |
---|---|---|---|
SVD | 0,873 | 0,686 | 0:01:07 |
SVD++ (cache_ratings=False) | 0,862 | 0,672 | 0:41:06 |
SVD++ (cache_ratings=True) | 0,862 | 0,672 | 0:34:55 |
NMF | 0,916 | 0,723 | 0:01:39 |
Steigung eins | 0,907 | 0,715 | 0:02:31 |
k-NN | 0,923 | 0,727 | 0:05:27 |
Zentriertes k-NN | 0,929 | 0,738 | 0:05:43 |
k-NN-Basislinie | 0,895 | 0,706 | 0:05:55 |
Co-Clustering | 0,915 | 0,717 | 0:00:31 |
Grundlinie | 0,909 | 0,719 | 0:00:19 |
Zufällig | 1.504 | 1.206 | 0:00:19 |
Mit pip (Sie benötigen einen C-Compiler. Windows-Benutzer bevorzugen möglicherweise die Verwendung von Conda):
$ pip install scikit-surprise
Mit Conda:
$ conda install -c conda-forge scikit-surprise
Für die neueste Version können Sie auch das Repo klonen und die Quelle erstellen (Sie benötigen zuerst Cython und Numpy):
$ git clone https://github.com/NicolasHug/surprise.git
$ cd surprise
$ pip install .
Dieses Projekt ist unter der BSD 3-Clause-Lizenz lizenziert und kann daher für so ziemlich alles verwendet werden, auch für kommerzielle Anwendungen.
Ich würde gerne wissen, welchen Nutzen Surprise für Sie hat. Bitte zögern Sie nicht, ein Problem zu eröffnen und zu beschreiben, wie Sie es verwenden!
Bitte zitieren Sie unbedingt den Artikel, wenn Sie Surprise für Ihre Recherche nutzen:
@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}
}
Die folgenden Personen haben zu Surprise beigetragen:
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.
Vielen Dank :) !
Ab Version 1.1.0 (September 2019) werde ich das Paket nur noch pflegen, Bugfixes bereitstellen und vielleicht manchmal auch Leistungsverbesserungen vornehmen. Ich habe jetzt weniger Zeit, mich damit zu beschäftigen, und bin daher nicht in der Lage, über neue Funktionen nachzudenken.
Bei Fehlern, Problemen oder Fragen zu Surprise vermeiden Sie es bitte, mir E-Mails zu senden. Ich werde höchstwahrscheinlich nicht antworten können). Bitte nutzen Sie stattdessen die GitHub-Projektseite, damit auch andere davon profitieren können.