Surprise é um scikit Python para construir e analisar sistemas de recomendação que lidam com dados de classificação explícitos.
Surpresa foi projetada com os seguintes propósitos em mente :
O nome SurPRISE (aproximadamente :)) significa Simple Python RecommendatIon System Engine .
Observe que surpresa não oferece suporte a classificações implícitas ou informações baseadas em conteúdo.
Aqui está um exemplo simples que mostra como você pode (baixar) carregar um conjunto de dados, dividi-lo para validação cruzada de 5 vezes e calcular o MAE e o RMSE do 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 )
Saída :
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
A surpresa pode fazer muito mais (por exemplo, GridSearchCV)! Você encontrará mais exemplos de uso na documentação.
Aqui estão o RMSE médio, o MAE e o tempo total de execução de vários algoritmos (com seus parâmetros padrão) em um procedimento de validação cruzada de 5 vezes. Os conjuntos de dados são os conjuntos de dados Movielens 100k e 1M. As dobras são iguais para todos os algoritmos. Todos os experimentos são executados em um laptop com processador Intel i5 de 11ª geração 2,60 GHz. O código para gerar essas tabelas pode ser encontrado no exemplo de benchmark.
Lente de filme 100k | REQM | MAE | Tempo |
---|---|---|---|
SVD | 0,934 | 0,737 | 0:00:06 |
SVD++ (cache_ratings=Falso) | 0,919 | 0,721 | 0:01:39 |
SVD++ (cache_ratings=Verdadeiro) | 0,919 | 0,721 | 0:01:22 |
NMF | 0,963 | 0,758 | 0:00:06 |
Inclinação Um | 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 |
Linha de base k-NN | 0,931 | 0,733 | 0:00:13 |
Co-Clustering | 0,963 | 0,753 | 0:00:06 |
Linha de base | 0,944 | 0,748 | 0:00:02 |
Aleatório | 1.518 | 1.219 | 0:00:01 |
Lentes de filme 1M | REQM | MAE | Tempo |
---|---|---|---|
SVD | 0,873 | 0,686 | 0:01:07 |
SVD++ (cache_ratings=Falso) | 0,862 | 0,672 | 0:41:06 |
SVD++ (cache_ratings=Verdadeiro) | 0,862 | 0,672 | 0:34:55 |
NMF | 0,916 | 0,723 | 0:01:39 |
Inclinação Um | 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 |
Linha de base k-NN | 0,895 | 0,706 | 0:05:55 |
Co-Clustering | 0,915 | 0,717 | 0:00:31 |
Linha de base | 0,909 | 0,719 | 0:00:19 |
Aleatório | 1.504 | 1.206 | 0:00:19 |
Com pip (você precisará de um compilador C. Os usuários do Windows podem preferir usar conda):
$ pip install scikit-surprise
Com Conda:
$ conda install -c conda-forge scikit-surprise
Para a versão mais recente, você também pode clonar o repositório e construir o código-fonte (primeiro você precisará do Cython e do numpy):
$ git clone https://github.com/NicolasHug/surprise.git
$ cd surprise
$ pip install .
Este projeto está licenciado sob a licença BSD 3-Clause, portanto pode ser usado para praticamente tudo, incluindo aplicações comerciais.
Eu adoraria saber como o Surprise é útil para você. Não hesite em abrir um problema e descrever como você o usa!
Certifique-se de citar o artigo se você usar o Surprise para sua pesquisa:
@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}
}
As seguintes pessoas contribuíram para o 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.
Muito obrigado :) !
A partir da versão 1.1.0 (setembro de 2019), irei apenas manter o pacote, fornecer correções de bugs e talvez às vezes melhorias de desempenho. Tenho menos tempo para me dedicar a isso agora, por isso não consigo considerar novos recursos.
Para bugs, problemas ou dúvidas sobre o Surprise, evite me enviar e-mails; Provavelmente não serei capaz de responder). Em vez disso, use a página do projeto GitHub, para que outras pessoas também possam se beneficiar dela.