当前位置:

首页 > 编程开发 > Python中如何通过Scikit-learn构建推荐系统原型_利用最近邻算法

Python中如何通过Scikit-learn构建推荐系统原型_利用最近邻算法

Scikit-learn虽无现成推荐系统模块,但其NearestNeighbors类可用于构建基于相似度的推荐原型。该方法适用于用户协同过滤,需注意选择余弦相似度、进行行归一化并使用稀疏矩阵。对于冷启动用户,需过滤零交互数据并准备后备推荐方案。该方案适合快速验证原型,但生产环境需转向专用库。

Python中如何通过Scikit-learn构建推荐系统原型:利用最近邻算法

Python中如何通过Scikit-learn构建推荐系统原型_利用最近邻算法

开门见山地说,如果你想在 scikit-learn 里找一个叫 RecommendationSystem 的模块,那恐怕要失望了。它不提供协同过滤、矩阵分解这类开箱即用的推荐算法接口。这并非功能遗漏,而是由其作为通用机器学习库的设计定位所决定的。

不过,这绝不意味着它无能为力。恰恰相反,scikit-learn 提供的底层工具足够灵活,能让你快速搭建出一个基于相似度的推荐系统原型。其核心,就在于 NearestNeighbors 这个类。它特别适合那些需要快速冷启动、数据量中等、且核心逻辑是“找到相似用户或物品”的场景,比如内部工具验证、产品最小可行性原型(MVP)或是教学演示。

scikit-learn 里没有现成的推荐系统模块

明确一点:scikit-learn 的武器库里没有名为“推荐系统”的专用武器。你找不到 fit_predict_ratings() 这类方法,文档和源码里也没有。它的设计初衷是提供基础的、可组合的机器学习组件,而非封装好的垂直领域解决方案。

但别急着关掉页面。虽然没有“一键推荐”,但它给了你所有必要的零件。通过组合 NearestNeighbors、矩阵操作和相似度计算,完全可以构建出推荐系统的核心骨架。这种方法优势在于透明可控,每一步逻辑都清晰可见,非常适合理解原理和快速迭代想法。

用 NearestNeighbors 做基于用户的协同过滤

基于用户的协同过滤,其核心思路非常直观:将每个用户对所有物品的评分(或交互)视为一个高维向量,然后计算用户向量之间的相似度,为当前用户找到品味相近的“邻居”,最后将这些邻居喜欢的物品加权推荐过来。

具体到 NearestNeighbors,有几个关键细节决定了成败:

  • 度量标准选择:默认的 metric=‘minkowski’(即欧氏距离)在处理评分数据时往往不是最佳选择。更常用的是 metric=‘cosine’(余弦相似度),因为它对向量的绝对大小不敏感,更关注评分模式的相对差异,非常适合稀疏且量纲不一的用户评分向量。
  • 行归一化是必须的:在计算余弦相似度前,务必对每个用户的评分向量进行单位化(即行归一化)。否则,一个习惯打高分的用户和一个习惯打低分的用户,即使品味完全一致,也会因为评分绝对值差异而显得“距离很远”,从而扭曲真实的相似性。
  • 注意矩阵形状:调用 fit() 方法时,输入的矩阵形状应为 (n_users, n_items)。这里容易混淆的是,通常机器学习中的特征矩阵是 (n_samples, n_features),而在推荐场景下,“样本”是用户,“特征”是物品,逻辑需要转换一下。
  • 拥抱稀疏矩阵:用户-物品矩阵天然是稀疏的(一个用户只与极少物品交互)。强烈建议使用 scipy.sparse.csr_matrix 来存储和计算,这能带来内存占用和计算速度的显著提升。直接使用稠密的 numpy 数组,数据量稍大就可能遭遇内存溢出(OOM)。

来看一个简洁的代码片段:

from sklearn.neighbors import NearestNeighbors
from scipy.sparse import csr_matrix

# 假设 user_item_matrix 已经是 csr_matrix,形状为 (n_users, n_items)
nn = NearestNeighbors(n_neighbors=5, metric=‘cosine’, algorithm=‘brute’)
nn.fit(user_item_matrix)

# 查找用户 123 的最近邻(返回距离和邻居索引)
distances, indices = nn.kneighbors(user_item_matrix[123], return_distance=True)

如何处理缺失值和冷启动用户

现实中的数据从不完美。新用户(冷启动)或交互极少的用户,其对应的评分行可能全部为零。这里有一个隐蔽的陷阱:NearestNeighbors 在处理全零向量时,计算出的距离可能为零或产生无意义的结果,且 kneighbors() 可能返回随机的邻居索引,而不会抛出错误。

如何应对?

  • 预处理过滤:在训练模型前,使用 user_item_matrix.getnnz(axis=1) > 0 筛选出至少有过一次交互的活跃用户。这是避免静默错误的第一步。
  • 冷启动策略:对于全新用户,他无法被嵌入现有的相似度空间。这时需要一个后备(fallback)方案,例如直接推荐全局热门物品(通过对 user_item_matrix 按列求和并排序得到),或者转向基于用户画像内容的简单规则。
  • 谨慎填充缺失值:切忌对整个评分矩阵用全局均值进行填充,这会严重污染相似度计算。如果必须填充,可以考虑仅对单个用户的缺失值,用该用户已有评分的均值进行行方向(axis=1)的填充。
  • 增量更新限制:NearestNeighbors 不支持增量学习。当有新用户加入或用户行为更新后,通常需要重新拟合(fit())整个模型。对于大规模数据,需要考虑设计定期的离线重训练流程。

为什么不用 NearestNeighbors 做基于物品的推荐

理论上,将用户-物品矩阵转置后,同样可以用 NearestNeighbors 计算物品间的相似度,实现“买了这个商品的人也买了……”的推荐。但实践中,这常常会遇到挑战。

首要问题是维度和稀疏性。在许多场景下,物品数量(如百万商品)远大于用户数量(如十万用户)。在高维且极度稀疏的空间中(一个商品可能只被极少数人购买),NearestNeighbors 的查询效率会急剧下降。此外,计算出的物品-物品相似度矩阵(n_items × n_items)规模可能非常庞大,容易超出内存限制。

如果仍然想尝试,请注意:

  • 务必使用 algorithm=‘brute’(暴力计算)配合 metric=‘cosine’。基于树的算法如 ‘ball_tree’ 或 ‘kd_tree’ 在高维稀疏数据上性能很差,甚至可能失效。
  • 考虑只对热门物品的子集构建相似度关系,以控制计算和存储成本。
  • 对于基于物品的推荐,另一个更实用的方法是使用 sklearn.metrics.pairwise.cosine_similarity 函数,批量计算小批次物品间的相似度,而非进行实时的最近邻查询。

说到底,用 NearestNeighbors 构建的推荐系统,其定位是一个清晰、快速的原型工具。它无法直接处理负采样、排序学习损失(Learning-to-Rank)或复杂的实时反馈闭环。要构建生产级的推荐系统,你可能需要转向 lightfm、implicit 等专用库,或自研更复杂的服务架构。

但对于验证想法、跑通数据流水线、理解推荐核心逻辑而言,NearestNeighbors 方案足够轻快、透明,是一个绝佳的起点。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 Python
相关文章 更多
langgraph python guide中文入门教程详解
langgraph python guide中文入门教程详解

本篇LangGraph Python中文入门教程详解,系统梳理StateGraph状态机定义、节点编写、边与条件路由、检查点持久化(MemorySaver)等核心机制,提供从环境安装到完整循环智能体构建的代码示例与实操指导。

Windows 安装 Python:从官方入口到虚拟环境的可复现实践
Windows 安装 Python:从官方入口到虚拟环境的可复现实践

面向后端开发者,基于 Python 官方文档说明如何在 Windows 上安装 Python、创建 venv 虚拟环境及使用 pip 管理依赖。包含可复制命令、验证方法及工具选择边界,避免常见配置误区。

Windows系统Python安装教程:下载、勾选PATH及环境变量配置
Windows系统Python安装教程:下载、勾选PATH及环境变量配置

针对Windows初学者的Python安装实战指南。详细讲解如何从Python官网下载匹配架构的安装包,重点演示安装首屏勾选“Add python.exe to PATH”的关键操作,并提供使用python --version和py命令验证环境变量的具体步骤,帮助新手快速搭建开发环境并排查路径问题。

Python安装后怎么打开:使用IDLE或命令行启动解释器
Python安装后怎么打开:使用IDLE或命令行启动解释器

刚在Windows安装好Python却不知道如何启动?本文详细演示如何通过开始菜单找到并打开IDLE集成开发环境,以及如何在PowerShell或命令提示符中使用python和py命令启动交互式解释器、运行.py脚本文件。包含退出解释器的方法及常见启动问题排查,帮助初学者快速验证安装成功并开始编写代码。

了解Python编程领域中最好的就业行业
了解Python编程领域中最好的就业行业

了解Python编程领域中最好的就业行业导语:近年来,Python作为一种易学易用的编程语言,越来越受到企业和开发者的青睐。在Python编程领域中,有许多就业机会,涵盖了各个行业。本文将介绍一些Python编程领域中最好的就业行业,并提供相应的代码示例。数据科学和机器学习数据科学和机器学习是Python编程领域中最热门的行业之一。Python在数据科学和机

python处理csv文件的方法完整实用教程
python处理csv文件的方法完整实用教程

针对Python处理CSV文件时常见的编码报错、内存溢出和数据类型错误,本文对比标准库csv与Pandas库的适用场景,提供可复制的代码示例和因果排查思路,帮助开发者选择最优处理方案。

python字典怎么按值排序用sorted函数实现升降序
python字典怎么按值排序用sorted函数实现升降序

本文介绍如何使用Python的sorted函数对字典按值进行升序和降序排序,结合具体代码示例和应用场景,帮助读者理解排序逻辑及其在数据处理中的实际价值。

python正则匹配修改方法与代码实现教程
python正则匹配修改方法与代码实现教程

深入讲解Python中使用re.sub进行正则匹配与替换的技巧,涵盖基础语法、分组引用及回调函数应用,帮助开发者解决复杂字符串修改需求,提升代码效率与可维护性。

selenium中文安装包下载与安装教程
selenium中文安装包下载与安装教程

详解Selenium在Python环境下的安装步骤,包括使用pip安装库文件、下载对应版本的浏览器驱动以及验证安装是否成功,适合自动化测试初学者参考。

skyvern官网入口及中文版使用教程
skyvern官网入口及中文版使用教程

Skyvern是一款基于大语言模型的开源浏览器自动化框架,目前仅提供英文界面且无官方中文版。本文指导用户通过GitHub获取源码,使用Docker快速部署本地环境,并解释其如何通过DOM树解析与自然语言指令实现网页自动操作,同时提供针对中文用户的配置建议与替代方案。

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Postman macOS版
Postman macOS版
Mac

Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

Docker Desktop macOS版
Docker Desktop macOS版
Mac

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

Android Studio macOS版
Android Studio macOS版
Mac

Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

WINDOWS 更多
Postman Windows版
Postman Windows版
Windows

Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

Docker Desktop Windows版
Docker Desktop Windows版
Windows

Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

Android Studio Windows版
Android Studio Windows版
Windows

Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,