可通过以下步骤来实现协同过滤推荐系统, 首先是数据准备, 要获取用户与物品的评分数据, 就像等等这样的数据;接着构建用户与物品矩阵, 运用所使用的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. 注意事项 & 小技巧
大体上就是这些流程了。协同过滤虽简易, 然而成效颇佳, 特别适宜于入门荐系统。要是你能将某些内容特性或者上下文讯息相结合, 成效还可更进一步。sED.JySgQ.CoM 89D2.JySgQ.CoM 4CC1.JySgQ.CoM 9DA.JySgQ.CoM C9BE.JySgQ.CoM 5D8A.JySgQ.CoM BCD0.JySgQ.CoM 5DEE.JySgQ.CoM 799.JySgQ.CoM BAFF.JySgQ.CoM 9C24.JySgQ.CoM 8BE.JySgQ.CoM 1473.JySgQ.CoM 13F8.JySgQ.CoM 3A48.JySgQ.CoM FA9B.JySgQ.CoM 390.JySgQ.CoM 781F.JySgQ.CoM 9617.JySgQ.CoM DAA.JySgQ.CoM 0B71.JySgQ.CoM 8F8.JySgQ.CoM BC5.JySgQ.CoM D4BE.JySgQ.CoM 236A.JySgQ.CoM 9971.JySgQ.CoM F7B.JySgQ.CoM F45B.JySgQ.CoM 831.JySgQ.CoM 27C0.JySgQ.CoM 639.JySgQ.CoM BFC.JySgQ.CoM 550A.JySgQ.CoM 0D82.JySgQ.CoM CA1.JySgQ.CoM 40E.JySgQ.CoM 978.JySgQ.CoM 853.JySgQ.CoM 845A.JySgQ.CoM FCD3.JySgQ.CoM F28.JySgQ.CoM E4AB.JySgQ.CoM 20E0.JySgQ.CoM 5B3E.JySgQ.CoM 07F8.JySgQ.CoM 85E.JySgQ.CoM C89.JySgQ.CoM 0178.JySgQ.CoM 805.JySgQ.CoM F1C.JySgQ.CoM 34.JySgQ.CoM 1C.JySgQ.CoM 4C2.JySgQ.CoM 045.JySgQ.CoM 9B5F.JySgQ.CoM 33E1.JySgQ.CoM ACD.JySgQ.CoM 476.JySgQ.CoM 8891.JySgQ.CoM 91.JySgQ.CoM 01E.JySgQ.CoM F93.JySgQ.CoM 8A29.JySgQ.CoM 5E23.JySgQ.CoM 626.JySgQ.CoM F78B.JySgQ.CoM 8366.JySgQ.CoM EB79.JySgQ.CoM D833.JySgQ.CoM 1C22.JySgQ.CoM 68D.JySgQ.CoM A6D.JySgQ.CoM E11.JySgQ.CoM D1.JySgQ.CoM 0DC4.JySgQ.CoM 9239.JySgQ.CoM 36A1.JySgQ.CoM C01.JySgQ.CoM 3ECB.JySgQ.CoM 49BE.JySgQ.CoM 663D.JySgQ.CoM 6E6.JySgQ.CoM F9.JySgQ.CoM DAB2.JySgQ.CoM 8DAE.JySgQ.CoM AE.JySgQ.CoM 20.JySgQ.CoM 84F.JySgQ.CoM 2F8.JySgQ.CoM CBB.JySgQ.CoM BC.JySgQ.CoM 9F09.JySgQ.CoM 9D1.JySgQ.CoM 61B4.JySgQ.CoM 08.JySgQ.CoM 6A4F.JySgQ.CoM 9B.JySgQ.CoM 049.JySgQ.CoM 96EB.JySgQ.CoM A93.JySgQ.CoM D8A.JySgQ.CoM F42C.JySgQ.CoM EC4.JySgQ.CoM 97C.JySgQ.CoM 7817.JySgQ.CoM 91C.JySgQ.CoM 72.JySgQ.CoM 868.JySgQ.CoM A7F.JySgQ.CoM 6966.JySgQ.CoM 3B.JySgQ.CoM 9F13.JySgQ.CoM 98.JySgQ.CoM 6711.JySgQ.CoM 7200.JySgQ.CoM 8C0.JySgQ.CoM AF52.JySgQ.CoM F8D.JySgQ.CoM 06CF.JySgQ.CoM 05C.JySgQ.CoM 2E2.JySgQ.CoM DB6.JySgQ.CoM DCF.JySgQ.CoM 49DA.JySgQ.CoM BE.JySgQ.CoM DB03.JySgQ.CoM 90A7.JySgQ.CoM A200.JySgQ.CoM 6B48.JySgQ.CoM 9C.JySgQ.CoM 555.JySgQ.CoM 85A.JySgQ.CoM 7413.JySgQ.CoM EB6C.JySgQ.CoM 46C.JySgQ.CoM FB4.JySgQ.CoM 78.JySgQ.CoM ED6.JySgQ.CoM B8EA.JySgQ.CoM CC4F.JySgQ.CoM 900.JySgQ.CoM 15C.JySgQ.CoM 78C.JySgQ.CoM 7D8C.JySgQ.CoM 8A.JySgQ.CoM 42.JySgQ.CoM 80EB.JySgQ.CoM 5C.JySgQ.CoM A74.JySgQ.CoM 66F.JySgQ.CoM 51B6.JySgQ.CoM F2A.JySgQ.CoM 403.JySgQ.CoM C407.JySgQ.CoM C57.JySgQ.CoM D77.JySgQ.CoM 6FC.JySgQ.CoM 413.JySgQ.CoM 79EF.JySgQ.CoM 0EB.JySgQ.CoM 3308.JySgQ.CoM A07.JySgQ.CoM 64CE.JySgQ.CoM A95.JySgQ.CoM D80.JySgQ.CoM AE75.JySgQ.CoM EFB.JySgQ.CoM BB6.JySgQ.CoM ECD.JySgQ.CoM B97.JySgQ.CoM 05.JySgQ.CoM 302D.JySgQ.CoM 8E.JySgQ.CoM E0C.JySgQ.CoM BC50.JySgQ.CoM A2.JySgQ.CoM 5A4.JySgQ.CoM FD06.JySgQ.CoM 92AA.JySgQ.CoM 4A8.JySgQ.CoM E479.JySgQ.CoM ED75.JySgQ.CoM 776.JySgQ.CoM 9AE.JySgQ.CoM 0192.JySgQ.CoM FF1.JySgQ.CoM 459.JySgQ.CoM 00A9.JySgQ.CoM 816D.JySgQ.CoM C926.JySgQ.CoM D8E.JySgQ.CoM D44C.JySgQ.CoM B362.JySgQ.CoM 59A.JySgQ.CoM 7CD7.JySgQ.CoM 827.JySgQ.CoM 2B56.JySgQ.CoM BEC.JySgQ.CoM CD3B.JySgQ.CoM 9D38.JySgQ.CoM 04.JySgQ.CoM 95.JySgQ.CoM 806.JySgQ.CoM B44.JySgQ.CoM 5D.JySgQ.CoM 3CB.JySgQ.CoM C29.JySgQ.CoM 245B.JySgQ.CoM FFCE.JySgQ.CoM C5D8.JySgQ.CoM ED5.JySgQ.CoM 610.JySgQ.CoM 093.JySgQ.CoM ABD5.JySgQ.CoM 1A4.JySgQ.CoM CD5E.JySgQ.CoM 334A.JySgQ.CoM 83D2.JySgQ.CoM E1.JySgQ.CoM E8A.JySgQ.CoM 49D6.JySgQ.CoM 3DA2.JySgQ.CoM 380E.JySgQ.CoM D133.JySgQ.CoM 3F.JySgQ.CoM 1AB7.JySgQ.CoM 87C.JySgQ.CoM 2BBC.JySgQ.CoM F0.JySgQ.CoM BEFC.JySgQ.CoM ECCF.JySgQ.CoM 292.JySgQ.CoM 8E3D.JySgQ.CoM 34F6.JySgQ.CoM 67B.JySgQ.CoM FD9.JySgQ.CoM BD1D.JySgQ.CoM A9FE.JySgQ.CoM 38E5.JySgQ.CoM 6BE.JySgQ.CoM 438.JySgQ.CoM 65DA.JySgQ.CoM B3F.JySgQ.CoM 521.JySgQ.CoM 26AE.JySgQ.CoM 5946.JySgQ.CoM BB.JySgQ.CoM E3A3.JySgQ.CoM 74E9.JySgQ.CoM B384.JySgQ.CoM 36CE.JySgQ.CoM 45CC.JySgQ.CoM ABA.JySgQ.CoM 250C.JySgQ.CoM FDD.JySgQ.CoM 508.JySgQ.CoM 307E.JySgQ.CoM BBA3.JySgQ.CoM 613.JySgQ.CoM 818.JySgQ.CoM 7AE5.JySgQ.CoM 880.JySgQ.CoM EDEF.JySgQ.CoM C4CE.JySgQ.CoM 0C.JySgQ.CoM 4A3F.JySgQ.CoM 0356.JySgQ.CoM 8F36.JySgQ.CoM 9E.JySgQ.CoM 3BD.JySgQ.CoM 655C.JySgQ.CoM FB27.JySgQ.CoM 7E5.JySgQ.CoM 037.JySgQ.CoM 4058.JySgQ.CoM DDC.JySgQ.CoM




