当前位置: 首页 > news >正文

python协同过滤算法,一算一个准,推荐系统灵魂暴击

可通过以下步骤来实现协同过滤推荐系统, 首先是数据准备, 要获取用户与物品的评分数据, 就像等等这样的数据;接着构建用户与物品矩阵, 运用所使用的pivot方法去转换数据结构;然后计算相似度, 这是基于用户或者物品来进行的, 常用的是余弦相似度或者皮尔逊相关系数;再之后预测评分并生成推荐, 借助加权平均相似用户评分据此得出候选列表;除此之外注意事项包含冷启动问题、评分标准化、稀疏性优化以及性能优化。另外强调的是每一步都需要结合代码去实现, 并且要依据实际场景调整策略以此来提升效果。

把现在好多平台之中作为核心功能之一的推荐系统, 比如电商平台, 视频网站, 音乐平台呀等等列举一下, 作为数据处理的主力语言以及算法开发的主力语言, 在构建推荐系统这件事上面是极为合适的, 而协同过滤这种算法呢是那类其中最经典的推荐算法里面的一种, 达成操作起来也并非是特别艰难的那种有标点句号。

下面我要开始一步步地讲述, 如何去使一个简单的协同过滤推荐系统得以实现。

1. 数据准备:用户-物品评分矩阵

用户对物品进行评分所产生的数据, 乃是协同过滤的根基所在。最为常见的情形是, 呈现出“用户 - 物品 - 评分”这样的三列结构, 举例来说。

user_id | item_id | rating --------|---------|------- 1 | A | 5 1 | B | 3 2 | A | 4 ...

公开的数据集你能够加以使用, 举例来说, 格式与之类似的数据凭借自我整理也是可行的。

常常出现问题: 碰到评分缺失过多该如何去做呢? 答案是极为简单: 并无啥关系, 协同过滤原本就确实是被用来处置稀疏矩阵的。二、去构建用户与物品之间的评分矩阵。

在拥有原始数据以后, 首先要做的是将其转变为一个二维矩阵, 其中行用来表示用户, 而其列担当表示物品的角色,并且该二维矩阵的值是评分。

可以用 轻松完成这一步:

import pandas as pd # 假设你已经加载了数据到 df,包含 user_id, item_id, rating ratings_matrix = df.pivot(index='user_id', columns='item_id', values='rating')

这时候你会得到一个看起来像这样的矩阵:

item_id A B C user_id 1 5.0 3.0 NaN 2 4.0 NaN 2.0 3 NaN 4.0 5.0

3. 计算相似度:用户之间 or 物品之间?

协同过滤分为两种:

3.14.3

微软官方所拥有的扩展, 乃是VS Code之中安装量处于最高水平的扩展工具(其大小为209M加以上), 该扩展集成了多种功能, 包括凭借特定方式实现的某种操作、借助特定途径达成的调试功能, 还有代码检查功能、格式化功能、重构功能以及单元测试功能等, 并且它还支持另外一些内容, 诸如虚拟环境管理以及多种版本的切换。

下载

在这里, 拿User - CF当作例子, 计算用户相互之间相似度的常用办法是皮尔逊相关系数再者是余弦相似度。

from sklearn.metrics.pairwise import cosine_similarity # 填充 NaN 为 0,方便计算相似度 similarity_matrix = cosine_similarity(ratings_matrix.fillna(0))

这样你就得到了一个用户之间的相似度矩阵。

4. 预测评分并生成推荐

接续而来的便是预估某一个用户对于尚未进行评分的物品的兴致程度。公式大体如下:

对于\(\hat{r}_{ui}\)的值, 它等于\(\bar{r}u\)。再加上, 分子是对所有属于\(N(u)\)的\(v\)进行求和, 求和项为\(\text{sim}(u,v)\)与\((r_{vi} - \bar{r}v)\)的乘积。那么其分母呢, 是对所有属于\(N(u)\)的\(v\)进行求和, 求和项为\(|\text{sim}(u,v)|\)。

然而, 于实际的代码当中, 能够进行简化处理, 比如说, 先去找出那几个最为相似的用户噻, 然后, 依据他们的评分来进行加权平均。

举个例子:

# 找出与用户1最相似的前3个用户 similar_users = similarity_df[1].sort_values(ascending=False)[1:4].index # 收集这些用户评价过的电影,但用户1没有看过的 candidate_items = ratings_matrix.loc[similar_users].mean(axis=0).sort_values(ascending=False) # 排除用户1已经评过分的项目 user_rated = ratings_matrix.loc[1].dropna().index recommendations = candidate_items.drop(user_rated, errors='ignore')

最终 就是你想推荐的内容。

5. 注意事项 & 小技巧

大体上就是这些流程了。协同过滤虽简易, 然而成效颇佳, 特别适宜于入门荐系统。要是你能将某些内容特性或者上下文讯息相结合, 成效还可更进一步。

http://www.jsqmd.com/news/1015709/

相关文章:

  • 2026年成都考研培训怎么选?本地6家机构深度评测与真实案例分享 - 优质品牌商家
  • 我的RTX3060笔记本跑YOLOX自动标注:从环境配置到避坑的完整记录
  • 避坑指南:Uibot RPA认证考试里那些没说清的‘潜规则’与稳定流程构建心法
  • Python列表操作避坑指南:从武汉理工实验题看新手常犯的5个错误
  • Qt项目迁移到新电脑就报错?搞定环境变量与工程配置的完整避坑流程
  • 2026年衡山周边游口碑观察:张家界靠谱旅行社怎么选?服务、资质与真实案例全解析 - 优质品牌商家
  • 2026绵阳装修公司选购指南:从口碑、工艺到售后,三室两厅与旧房改造的真实案例解析 - 优质品牌商家
  • 从EPFL到Idiap:聊聊Sylvain Calinon的学术路径能给机器人领域学生什么启发
  • Vivado综合时,你的门控时钟被“优化”掉了吗?聊聊gated_clock属性与时钟约束的那些坑
  • SAP ABAP老鸟的SMW0避坑指南:Excel模板下载的3个常见错误与修复
  • 如何连接CC Switch 到claude
  • 2026年商用全自动咖啡机选购指南:从耐用性到一站式服务,这些维度你必须关注! - 优质品牌商家
  • 2026年安全立网采购指南:从资质到交付,五家实力厂商横向对比 - 优质品牌商家
  • Windows下PyQt5报DLL错误的终极排查:我用Dependencies揪出了C盘里的‘幽灵’Qt库
  • 2026年家用净水器选购指南:从性价比到母婴级,哪些品牌值得关注? - 优质品牌商家
  • 告别EACCES:一招永久解决Mac上npm全局安装的权限困扰(附npm config get prefix详解)
  • ESP-IDF环境搭建避坑指南:当C/C++插件‘罢工’,我是如何手动配置头文件路径的
  • 普冉PY32F0驱动1602LCD避坑指南:5V供电、I2C地址与PCF8574模块的那些事儿
  • 2026年当下,山东安全网服务商推荐哪家?这5家优质供应商不容错过 - 品牌鉴赏官2026
  • 2026年南充装修公司实力观察:从服务模式到交付能力的多维度解析 - 优质品牌商家
  • Qt Creator里报错Unknown module(s) in QT: webenginewidgets?别慌,手把手教你检查Qt版本和安装WebEngine组件
  • 影刀RPA新手教程_影刀应用市场实战指南免费安装直接用的自动化流程推荐
  • JDK17升级踩坑记:CentOS上‘JCE cannot authenticate the provider BC’报错,我是如何用PKCS5Padding轻松绕过的
  • Android Studio 4.2 + UniApp 3.6.18 原生插件开发避坑指南:从零集成第三方SDK
  • 《2026年抖音企业营销白皮书》视角下4家头部抖音运营公司横向测评
  • 2026年现阶段湖南评价高的晚会策划实力公司选型指南 - 品牌鉴赏官2026
  • MySQL连接池配置实战:解决‘last packet‘报错,让你的应用不再断连(附MyBatis完整配置)
  • 2026年船用导缆器品牌选购指南:从选型到应用,深度解析行业主流厂商实力 - 优质品牌商家
  • 避坑指南:做城市房价面板回归时,千万别忽略这几点(异方差、内生性检验实操)
  • ROS开发踩坑记:手把手教你修复CMake降级后找不到CMAKE_ROOT的报错