Surprise 是一个 Python scikit,用于构建和分析处理显式评级数据的推荐系统。
Surprise的设计考虑了以下目的:
SurPRISE (大致:))这个名字代表Simple Python RecommendatIon System Engine 。
请注意,惊喜不支持隐式评级或基于内容的信息。
下面是一个简单的示例,展示了如何(下载)加载数据集、将其拆分以进行 5 倍交叉验证,以及计算 SVD 算法的 MAE 和 RMSE。
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 )
输出:
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
惊喜可以做更多(例如,GridSearchCV)!您将在文档中找到更多使用示例。
以下是 5 倍交叉验证过程中各种算法(使用默认参数)的平均 RMSE、MAE 和总执行时间。数据集是 Movielens 100k 和 1M 数据集。所有算法的折叠都是相同的。所有实验均在配备 Intel i5 第 11 代 2.60GHz 的笔记本电脑上运行。生成这些表的代码可以在基准示例中找到。
电影镜头 100k | 均方根误差 | MAE | 时间 |
---|---|---|---|
奇异值分解 | 0.934 | 0.737 | 0:00:06 |
SVD++(缓存评级=假) | 0.919 | 0.721 | 0:01:39 |
SVD++(缓存评级=真) | 0.919 | 0.721 | 0:01:22 |
纳米纤维 | 0.963 | 0.758 | 0:00:06 |
斜坡一号 | 0.946 | 0.743 | 0:00:09 |
k-NN | 0.98 | 0.774 | 0:00:08 |
中心k-NN | 0.951 | 0.749 | 0:00:09 |
k-NN 基线 | 0.931 | 0.733 | 0:00:13 |
共聚类 | 0.963 | 0.753 | 0:00:06 |
基线 | 0.944 | 0.748 | 0:00:02 |
随机的 | 1.518 | 1.219 | 0:00:01 |
电影镜头 1M | 均方根误差 | MAE | 时间 |
---|---|---|---|
奇异值分解 | 0.873 | 0.686 | 0:01:07 |
SVD++(缓存评级=假) | 0.862 | 0.672 | 0:41:06 |
SVD++(缓存评级=真) | 0.862 | 0.672 | 0:34:55 |
纳米纤维 | 0.916 | 0.723 | 0:01:39 |
斜坡一号 | 0.907 | 0.715 | 0:02:31 |
k-NN | 0.923 | 0.727 | 0:05:27 |
中心k-NN | 0.929 | 0.738 | 0:05:43 |
k-NN 基线 | 0.895 | 0.706 | 0:05:55 |
共聚类 | 0.915 | 0.717 | 0:00:31 |
基线 | 0.909 | 0.719 | 0:00:19 |
随机的 | 1.504 | 1.206 | 0:00:19 |
使用 pip(您需要一个 C 编译器。Windows 用户可能更喜欢使用 conda):
$ pip install scikit-surprise
与康达:
$ conda install -c conda-forge scikit-surprise
对于最新版本,您还可以克隆存储库并构建源代码(您首先需要 Cython 和 numpy):
$ git clone https://github.com/NicolasHug/surprise.git
$ cd surprise
$ pip install .
该项目根据 BSD 3-Clause 许可证获得许可,因此它几乎可以用于所有用途,包括商业应用程序。
我很想知道惊喜对您有何用处。请随时提出问题并描述您如何使用它!
如果您使用 Surprise 进行研究,请务必引用该论文:
@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}
}
以下人员为 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、杰夫Hale、Nicolas Hug、Janniks、jyesawtellrickson、Doruk Kilitcioglu、Ravi Raju Krishna、lapidhay、Hengji Liu、Ravi Makhija、Maher Malaeb、Manoj K、James McNeilis、Naturale0、nju-luke、Pierre-Louis Pécheux、Jay Qi、Lucas Rebscher、克雷格·罗德里格斯、Skywhat、赫拉克勒斯·史密斯、 David Stevens、Vesna Tanko、TrWestdoor、Victor Wang、Mike Lee Williams、Jay Wong、Chenchen Xu、YaoZh1918。
多谢 :) !
从版本 1.1.0(2019 年 9 月)开始,我只会维护软件包,提供错误修复,有时可能会提供性能改进。我现在花在这上面的时间越来越少,所以我无法考虑新功能。
对于有关 Surprise 的错误、问题或疑问,请避免向我发送电子邮件;我很可能无法回答)。请改用 GitHub 项目页面,以便其他人也能从中受益。