Python推荐系统核心是理清“用户—物品—交互”关系并匹配算法:有行为日志用User-CF/Item-CF,仅物品属性用Content-Based,冷启动用混合策略;预处理需构建稀疏矩阵并中心化;Item-CF适合工程落地;Surprise库可快速验证SVD等模型。

用Python构建推荐系统,核心不在代码多炫酷,而在理清“用户—物品—交互”三者关系,并选对匹配场景的算法逻辑。下面直接拆解最常用、最实用的几条主线。
明确推荐类型:从场景反推算法
不是所有推荐都用协同过滤。先看你的数据长什么样:
- 有用户行为日志(点击/购买/评分)? → 优先试基于用户的协同过滤(User-CF)或基于物品的协同过滤(Item-CF)
- 只有物品属性(如电影类型、商品参数)? → 用基于内容的推荐(Content-Based),TF-IDF 或词向量 + 余弦相似度即可起步
- 用户少、物品多,或冷启动严重? → 混合策略更稳,比如用物品热度兜底 + 少量行为做微调
数据预处理:稀疏矩阵是协同过滤的起点
用户-物品交互表(比如 user_id, item_id, rating)不能直接喂给模型。得转成稀疏矩阵:
- 用 scipy.sparse.csr_matrix 构建用户×物品评分矩阵,行=用户,列=物品
- 缺失值统一设为 0,但注意:0 不代表“不喜欢”,只是“未交互”——后续计算相似度时要用皮尔逊相关系数或调整余弦相似度,避开全零行干扰
- 对高维稀疏矩阵,可先用 sklearn.preprocessing.StandardScaler 对每行(用户)中心化(减均值),提升相似度稳定性
实现Item-CF:简单有效,适合工程落地
物品协同过滤(Item-CF)在电商、视频平台最常用,逻辑清晰、更新成本低:
立即学习“Python免费学习笔记(深入)”;
- 先算物品两两之间的相似度:用 sklearn.metrics.pairwise.cosine_similarity 对物品向量(即评分矩阵的列)批量计算
- 对目标用户u,找出他交互过的物品集合 I(u),再对每个 i ∈ I(u),取最相似的 top-K 个物品 j,加权聚合(sim(i,j) × rating(u,i))
- 最终排序推荐结果,过滤掉用户已交互过的物品即可
轻量级进阶:用Surprise库快速验证想法
不想从头写SVD或ALS?Surprise 是专为推荐设计的Python库,几行代码就能跑 baseline:
- from surprise import SVD, Dataset, accuracy
- 用 Dataset.load_from_df(df[['user','item','rating']]) 加载数据
- 训练 SVD(n_factors=100),predict() 方法直接返回预测分,按分排序就是推荐列表
- 它内置交叉验证和评估指标(RMSE、MAE),方便快速对比不同算法效果
基本上就这些。不复杂但容易忽略的是:推荐不是越准越好,而是要平衡准确性、实时性、可解释性和业务目标。先跑通一个Item-CF,再逐步加特征、换模型、接线上服务——路是一步一步走出来的。










