当前位置: 首页 > 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.rkmt.cn/news/1527530.html

相关文章:

  • 【Android】Android 自定义 View:Canvas 绘图与事件分发全解析
  • 2026年衡山周边游口碑观察:张家界靠谱旅行社怎么选?服务、资质与真实案例全解析 - 优质品牌商家
  • SAP ABAP老鸟的SMW0避坑指南:Excel模板下载的3个常见错误与修复
  • 2026年家用净水器选购指南:从性价比到母婴级,哪些品牌值得关注? - 优质品牌商家
  • JDK17升级踩坑记:CentOS上‘JCE cannot authenticate the provider BC’报错,我是如何用PKCS5Padding轻松绕过的
  • Qt Creator里报错Unknown module(s) in QT: webenginewidgets?别慌,手把手教你检查Qt版本和安装WebEngine组件
  • 2026年南充装修公司实力观察:从服务模式到交付能力的多维度解析 - 优质品牌商家
  • 2026年当下,山东安全网服务商推荐哪家?这5家优质供应商不容错过 - 品牌鉴赏官2026
  • Android Studio 4.2 + UniApp 3.6.18 原生插件开发避坑指南:从零集成第三方SDK
  • ROS开发踩坑记:手把手教你修复CMake降级后找不到CMAKE_ROOT的报错
  • 避坑指南:用Altium Designer处理ADS导出的DXF文件时,我踩过的那些‘雷’
  • 2026年上海机场招聘口碑深度观察:南通本土服务商如何抢占浦东、虹桥人才输送高地? - 优质品牌商家
  • 深入解析Maven中的循环依赖问题
  • 告别服务雪崩:一份给微服务新手的Istio熔断器配置避坑指南(含ConnectionPool参数详解)
  • FPG平台:信息透明度的清单解读
  • 新手必看:除了VulnHub,这7个免费靶场平台哪个更适合你入门?
  • SceMoS:基于2D场景表示的文本驱动3D人体运动合成框架
  • 负反馈电路设计避坑指南:从自激振荡到深度负反馈稳定性的实战解析
  • 【端到端智驾基础】1.LSS-based BEV特征 Encoder
  • 2026年义乌律师咨询服务现状分析:多家专业机构与资深律师的客观评测参考 - 优质品牌商家
  • MySQL连接池配置避坑指南:解决‘The last packet...’报错,让你的应用不再断连
  • 避坑指南:220/110/10kV变电站电气一次设计中最容易被忽略的5个细节(附计算实例)
  • C#/.NET 从入门到精通:一个老程序员踩过的5个坑和3个实战技巧
  • 2026年跷脚牛肉加盟品牌实力评估:谁在供应链与运营上更具优势? - 优质品牌商家
  • 从指纹识别到ChatGPT:一文读懂AI的过去、现在与未来(附面试高频考点解析)
  • 别再乱调iPerf3的-w参数了!TCP/UDP场景下的正确用法与避坑指南
  • CPU设计避坑指南:硬连线控制单元实战与指令集缺陷分析
  • 2026年新消息:深耕西北,信誉的宁夏吨包袋供应商——平罗县强盛塑料包装有限公司实力解析 - 品牌鉴赏官2026
  • K8s Pod卡在Pending状态?别慌,这5个检查点帮你快速定位问题
  • 避开海思3559 BT656调试的那些‘坑’:从硬件引脚到VI日志的完整避坑指南