展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 编程开发 > 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)或复杂的实时反馈闭环。要构建生产级的推荐系统,你可能需要转向 lightfmimplicit 等专用库,或自研更复杂的服务架构。

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

本文内容来源于互联网,如有侵权请联系删除。
作者最新文章
编程开发 Python
相关文章 更多
精品专题 更多
本月促销

正软商城本月促销专区,汇集办公、设计、安全、影音、系统工具及AI软件等正版软件优惠活动,提供限时折扣、特价授权和优惠购买信息,活动库存及价格以页面实时展示为准。

装机必备

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

Windows

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

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

PDF教程

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

Mac软件 更多
灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Menuist
Menuist

Menuist 是一款面向 macOS 的 Finder 右键菜单增强工具,主要用来补充新建文件、快捷导航等常用操作,让日常文件管理和访问路径时更高效、更顺手。

Mole
Mole

Mole 是一款专为 Mac 设计的深度清理优化工具,涵盖缓存清理、应用管理及实时状态监控等功能。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

PinStack
PinStack

PinStack是一款轻量级的Windows平台剪贴板管理工具,优化您的剪贴板使用体验。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

Seer
Seer

Seer是一款在Win平台下的空格键功能增强效率工具,只需轻敲空格键,就能预览几乎任何格式的文件。它更适合把零散的小功能集中起来使用,处理高频琐碎任务时会更省事。