Surprise es un scikit de Python para crear y analizar sistemas de recomendación que tratan con datos de calificación explícitos.
Sorpresa fue diseñada con los siguientes propósitos en mente :
El nombre SurPRISE (aproximadamente :)) significa Motor de sistema de recomendación simple de Python .
Tenga en cuenta que la sorpresa no admite calificaciones implícitas ni información basada en contenido.
A continuación se muestra un ejemplo sencillo que muestra cómo se puede (descargar) un conjunto de datos, dividirlo para una validación cruzada de 5 veces y calcular el MAE y el RMSE del algoritmo 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 )
Producción :
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
¡La sorpresa puede hacer mucho más (por ejemplo, GridSearchCV)! Encontrarás más ejemplos de uso en la documentación.
A continuación se muestran el RMSE, MAE y el tiempo total de ejecución promedio de varios algoritmos (con sus parámetros predeterminados) en un procedimiento de validación cruzada de 5 veces. Los conjuntos de datos son los conjuntos de datos Movielens 100k y 1M. Los pliegues son los mismos para todos los algoritmos. Todos los experimentos se realizan en una computadora portátil con Intel i5 de 11.a generación a 2,60 GHz. El código para generar estas tablas se puede encontrar en el ejemplo de referencia.
Lentes de película 100k | RMSE | MAE | Tiempo |
---|---|---|---|
SVD | 0.934 | 0,737 | 0:00:06 |
SVD++ (cache_ratings=Falso) | 0.919 | 0,721 | 0:01:39 |
SVD++ (cache_ratings=Verdadero) | 0.919 | 0,721 | 0:01:22 |
NMF | 0.963 | 0,758 | 0:00:06 |
Pendiente uno | 0.946 | 0.743 | 0:00:09 |
k-NN | 0,98 | 0,774 | 0:00:08 |
k-NN centrado | 0.951 | 0,749 | 0:00:09 |
Línea base k-NN | 0.931 | 0.733 | 0:00:13 |
Co-agrupación | 0.963 | 0,753 | 0:00:06 |
Base | 0.944 | 0,748 | 0:00:02 |
Aleatorio | 1.518 | 1.219 | 0:00:01 |
Lentes de película 1M | RMSE | MAE | Tiempo |
---|---|---|---|
SVD | 0,873 | 0,686 | 0:01:07 |
SVD++ (cache_ratings=Falso) | 0.862 | 0,672 | 0:41:06 |
SVD++ (cache_ratings=Verdadero) | 0.862 | 0,672 | 0:34:55 |
NMF | 0.916 | 0,723 | 0:01:39 |
Pendiente uno | 0.907 | 0,715 | 0:02:31 |
k-NN | 0.923 | 0,727 | 0:05:27 |
k-NN centrado | 0,929 | 0,738 | 0:05:43 |
Línea base k-NN | 0,895 | 0.706 | 0:05:55 |
Co-agrupación | 0,915 | 0,717 | 0:00:31 |
Base | 0.909 | 0,719 | 0:00:19 |
Aleatorio | 1.504 | 1.206 | 0:00:19 |
Con pip (necesitará un compilador de C. Es posible que los usuarios de Windows prefieran usar conda):
$ pip install scikit-surprise
Con conda:
$ conda install -c conda-forge scikit-surprise
Para la última versión, también puedes clonar el repositorio y compilar el código fuente (primero necesitarás Cython y numpy):
$ git clone https://github.com/NicolasHug/surprise.git
$ cd surprise
$ pip install .
Este proyecto tiene la licencia BSD de 3 cláusulas, por lo que se puede utilizar para prácticamente todo, incluidas aplicaciones comerciales.
Me encantaría saber en qué te resulta útil Surprise. ¡No dude en abrir un número y describir cómo lo usa!
Asegúrese de citar el artículo si utiliza Surprise para su investigación:
@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}
}
Las siguientes personas han contribuido a 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, Nicolás Abrazo, 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, Hércules Smith, David Stevens, Vesna Tanko, TrWestdoor, Víctor Wang, Mike Lee Williams, Jay Wong, Chenchen Xu, YaoZh1918.
Muchas gracias :) !
A partir de la versión 1.1.0 (septiembre de 2019), solo mantendré el paquete, proporcionaré correcciones de errores y quizás, a veces, mejoras de rendimiento. Ahora tengo menos tiempo para dedicarle, por lo que no puedo considerar nuevas funciones.
Para errores, problemas o preguntas sobre Surprise, evite enviarme correos electrónicos; Lo más probable es que no pueda responder). Utilice la página del proyecto GitHub en su lugar, para que otros también puedan beneficiarse de ella.