Surprise

GitHub
6.8k 1.1k 简单 1 次阅读 2天前BSD-3-Clause开发框架
AI 解读 由 AI 自动生成,仅供参考

Surprise 是一个专为构建和分析推荐系统设计的 Python 库,特别擅长处理基于用户显式评分(如电影打分)的数据。它主要解决了开发者在搭建推荐模型时面临的数据加载繁琐、算法实现复杂以及评估流程不统一等痛点,让用户能将精力集中在实验设计与结果分析上。

这款工具非常适合数据科学家、算法研究人员以及希望快速验证推荐策略的开发者使用。Surprise 的核心亮点在于其极高的灵活性与易用性:它不仅内置了 Movielens 等经典数据集,支持一键加载自定义数据,还提供了丰富的现成算法,包括基础基准算法、邻域方法以及多种矩阵分解技术(如 SVD、SVD++、NMF 等)。此外,Surprise 深度集成了类似 scikit-learn 的交叉验证工具和网格搜索功能,帮助用户轻松完成模型评估、参数调优及性能对比。虽然它不支持隐式反馈或基于内容的推荐,但在显式评分场景下,Surprise 凭借清晰的文档和模块化设计,成为了探索推荐算法理想的“瑞士军刀”。

使用场景

某电商初创公司的数据团队正急需为平台构建一个基于用户历史评分的商品推荐系统,以提升转化率。

没有 Surprise 时

  • 算法实现繁琐:开发人员需从零手写 SVD、NMF 等矩阵分解算法或邻域方法,代码量大且极易出错,难以保证数学逻辑的严谨性。
  • 评估流程割裂:缺乏统一的交叉验证框架,每次调整参数都需手动编写数据划分和指标计算(如 RMSE、MAE)脚本,实验效率极低。
  • 数据预处理痛苦:面对自定义的用户评分数据,需要花费大量时间清洗格式并适配不同的模型输入,无法直接复用公开数据集(如 Movielens)进行基准测试。
  • 调参依赖经验:缺少自动化的网格搜索工具,寻找最优超参数组合如同“大海捞针”,严重拖慢模型迭代速度。

使用 Surprise 后

  • 算法即插即用:直接调用 Surprise 内置的 SVD、SVD++ 及多种相似度度量标准,几行代码即可构建高精度推荐模型,让团队聚焦业务逻辑而非底层数学。
  • 评估标准化:利用其强大的交叉验证迭代器,一键完成多折验证并自动输出性能分析报告,确保实验结果可复现且对比直观。
  • 数据加载无缝衔接:轻松加载内置数据集进行原型验证,同时通过简洁的 API 快速导入公司自有的评分数据,大幅缩短数据准备周期。
  • 智能参数寻优:借助 GridSearchCV 工具自动遍历参数空间,快速锁定最佳模型配置,将原本数天的调参工作压缩至数小时。

Surprise 将复杂的推荐系统研发转化为标准化的科学实验,让团队能以最低成本快速验证算法价值并落地生产。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

未说明

内存

未说明

依赖
notes安装需要 C 编译器,Windows 用户建议优先使用 conda 进行安装。该库仅支持显式评分数据,不支持隐式反馈或基于内容的推荐。
python3.8+
Cython
numpy
Surprise hero image

快速开始

GitHub版本 文档状态 Python版本 许可证 DOI

logo

概述

Surprise 是一个用于构建和分析处理显式评分数据的推荐系统的 Python scikit

Surprise 的设计宗旨如下

  • 为用户提供对其实验的完全控制。为此,我们非常重视 文档,并力求通过指出算法的每一个细节,使其尽可能清晰、准确。
  • 减轻 数据集处理 的繁琐。用户既可以使用 内置 数据集(如 MovielensJester),也可以使用自己的 自定义 数据集。
  • 提供多种开箱即用的 预测算法,例如 基准算法基于邻域的方法、基于矩阵分解的算法(如 SVDPMFSVD++NMF)以及其他许多算法。此外,还内置了多种 相似度度量(余弦、MSD、皮尔逊等)。
  • 简化 新算法思路 的实现。
  • 提供工具来 评估分析比较 算法性能。借助强大的交叉验证迭代器(灵感来自 scikit-learn 的优秀工具),可以非常方便地运行交叉验证过程,还可以对参数集合进行 穷举搜索

名称 SurPRISE(大致意为 :) )代表 Simple Python RecommendatIon System Engine

请注意,Surprise 不支持隐式评分或基于内容的信息。

快速入门,示例

以下是一个简单的示例,展示如何(下载)加载数据集、将其划分为 5 折交叉验证,并计算 SVD 算法的 MAE 和 RMSE。

from surprise import SVD
from surprise import Dataset
from surprise.model_selection import cross_validate

# 加载 movielens-100k 数据集(如果需要则下载)。
data = Dataset.load_builtin('ml-100k')

# 使用著名的 SVD 算法。
algo = SVD()

# 运行 5 折交叉验证并打印结果。
cross_validate(algo, data, measures=['RMSE', 'MAE'], cv=5, verbose=True)

输出

正在评估算法 SVD 在 5 个分割上的 RMSE 和 MAE。

                  折1  折2  折3  折4  折5  平均值    标准差     
RMSE (测试集)    0.9367  0.9355  0.9378  0.9377  0.9300  0.9355  0.0029  
MAE (测试集)     0.7387  0.7371  0.7393  0.7397  0.7325  0.7375  0.0026  
拟合时间        0.62    0.63    0.63    0.65    0.63    0.63    0.01    
测试时间        0.11    0.11    0.14    0.14    0.14    0.13    0.02    

Surprise 还能做 更多 的事情(例如, GridSearchCV)!您可以在 文档 中找到 更多使用示例

基准测试

以下是各种算法(使用默认参数)在 5 折交叉验证中的平均 RMSE、MAE 和总执行时间。数据集为 Movielens 的 100k 和 1M 数据集。所有算法使用的折划分相同。所有实验均在配备 Intel i5 第 11 代 2.60GHz 处理器的笔记本电脑上运行。生成这些表格的代码可在 基准测试示例 中找到。

Movielens 100k RMSE MAE 时间
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
Slope One 0.946 0.743 0:00:09
k-NN 0.98 0.774 0:00:08
Centered k-NN 0.951 0.749 0:00:09
k-NN Baseline 0.931 0.733 0:00:13
Co-Clustering 0.963 0.753 0:00:06
Baseline 0.944 0.748 0:00:02
Random 1.518 1.219 0:00:01
Movielens 1M RMSE MAE 时间
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
Slope One 0.907 0.715 0:02:31
k-NN 0.923 0.727 0:05:27
Centered k-NN 0.929 0.738 0:05:43
k-NN Baseline 0.895 0.706 0:05:55
Co-Clustering 0.915 0.717 0:00:31
Baseline 0.909 0.719 0:00:19
Random 1.504 1.206 0:00:19

安装

使用 pip(需要 C 编译器。Windows 用户可能更倾向于使用 conda):

$ pip install scikit-surprise

使用 conda:

$ conda install -c conda-forge scikit-surprise

对于最新版本,您也可以克隆仓库并构建源代码 (您首先需要 Cythonnumpy):

$ git clone https://github.com/NicolasHug/surprise.git
$ cd surprise
$ pip install .

许可证与引用

本项目采用 BSD 3-Clause 许可证,因此几乎可以用于任何用途,包括商业应用。

我很想知道 Surprise 对您的帮助有多大。请随时提交 issue 并描述您是如何使用它的!

如果您在研究中使用 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, 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.

非常感谢! :)

开发状态

自 1.1.0 版本(2019 年 9 月)起,我将仅维护该包,提供错误修复,或许偶尔会进行性能优化。现在我投入的时间较少,因此无法考虑新增功能。

如遇 Surprise 的 bug、问题或疑问,请勿发送邮件给我(我很可能无法回复)。请改用 GitHub 上的项目页面,以便其他人也能从中受益。

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|今天
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|昨天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

141.5k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.9k|★★☆☆☆|今天
开发框架图像Agent

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|今天
语言模型图像Agent

Deep-Live-Cam

Deep-Live-Cam 是一款专注于实时换脸与视频生成的开源工具,用户仅需一张静态照片,即可通过“一键操作”实现摄像头画面的即时变脸或制作深度伪造视频。它有效解决了传统换脸技术流程繁琐、对硬件配置要求极高以及难以实时预览的痛点,让高质量的数字内容创作变得触手可及。 这款工具不仅适合开发者和技术研究人员探索算法边界,更因其极简的操作逻辑(仅需三步:选脸、选摄像头、启动),广泛适用于普通用户、内容创作者、设计师及直播主播。无论是为了动画角色定制、服装展示模特替换,还是制作趣味短视频和直播互动,Deep-Live-Cam 都能提供流畅的支持。 其核心技术亮点在于强大的实时处理能力,支持口型遮罩(Mouth Mask)以保留使用者原始的嘴部动作,确保表情自然精准;同时具备“人脸映射”功能,可同时对画面中的多个主体应用不同面孔。此外,项目内置了严格的内容安全过滤机制,自动拦截涉及裸露、暴力等不当素材,并倡导用户在获得授权及明确标注的前提下合规使用,体现了技术发展与伦理责任的平衡。

88.9k|★★★☆☆|今天
开发框架图像Agent