TypechoJoeTheme

至尊技术网

登录
用户名
密码

协同过滤推荐算法(一)原理与实现,协同过滤的推荐系统

2025-12-08
/
0 评论
/
1 阅读
/
正在检测是否收录...
12/08

正文:
想象一下走进一家书店,店员根据你上次购买的科幻小说,精准推荐了同类型的新书——这就是协同过滤推荐系统的现实映射。作为推荐引擎的基石算法,它通过群体智慧预测个体偏好,成为Netflix、亚马逊等平台的核心竞争力。

一、群体智慧的数学表达
协同过滤分为两大流派:用户协同(User-CF)和物品协同(Item-CF)。前者基于“相似用户喜欢相同物品”的假设,后者遵循“喜欢某物品的人也可能喜欢相似物品”的逻辑。其数学本质是相似度计算与矩阵补全的结合。

以用户协同为例,核心公式如下:
用户相似度计算(皮尔逊相关系数):
sim(u,v) = Σ(R_u,i - R_u_avg)(R_v,i - R_v_avg) / [√Σ(R_u,i - R_u_avg)² * √Σ(R_v,i - R_v_avg)²]
预测评分则通过加权平均实现:
P(u,i) = R_u_avg + [Σ sim(u,v) * (R_v,i - R_v_avg)] / Σ|sim(u,v)|

二、Python实战:从零构建推荐引擎
我们以MovieLens数据集为例,构建用户协同过滤系统:

python
import pandas as pd
import numpy as np
from scipy.spatial.distance import correlation

加载数据集

ratings = pd.readcsv('ratings.csv') movies = pd.readcsv('movies.csv')

构建用户-电影评分矩阵

ratingmatrix = ratings.pivottable(index='userId', columns='movieId', values='rating')

用户相似度计算

def usersimilarity(user1, user2): commonmovies = ratingmatrix.loc[user1].notna() & ratingmatrix.loc[user2].notna()
return 1 - correlation(ratingmatrix.loc[user1][commonmovies],
ratingmatrix.loc[user2][commonmovies])

生成推荐

def recommend(userid, n=10): simscores = []
for uid in ratingmatrix.index: if uid != userid:
sim = usersimilarity(userid, uid)
sim_scores.append((uid, sim))

top_users = sorted(sim_scores, key=lambda x: x[1], reverse=True)[:5]

rec_movies = {}
for movie in rating_matrix.columns:
    if pd.isna(rating_matrix.loc[user_id, movie]):
        weighted_sum = 0
        sim_sum = 0
        for uid, sim in top_users:
            if not pd.isna(rating_matrix.loc[uid, movie]):
                weighted_sum += sim * rating_matrix.loc[uid, movie]
                sim_sum += sim
        if sim_sum > 0:
            rec_movies[movie] = weighted_sum / sim_sum

return sorted(rec_movies.items(), key=lambda x: x[1], reverse=True)[:n]

这段代码实现了关键四步:
1. 构建稀疏评分矩阵
2. 计算用户间的修正余弦相似度
3. 筛选Top-N相似用户
4. 通过加权平均预测缺失评分

三、工程化挑战与优化方向
实际部署时需解决三大难题:
1. 冷启动问题:新用户/新物品缺乏历史数据
- 解决方案:混合内容过滤(Content-based Filtering)
2. 数据稀疏性:用户-物品矩阵通常填充率不足5%
- 解决方案:矩阵分解(SVD++或ALS)
3. 实时性要求:百万级用户实时计算
- 解决方案:近似最近邻(ANN)算法优化

一个典型优化案例是亚马逊的Item-CF改进:引入时间衰减因子,使近期行为权重更高。其相似度计算升级为:
sim(i,j) = Σ[f(t_uv) * R_u,i * R_u,j] / √(Σ R²_u,i * Σ R²_u,j)
其中时间衰减函数f(t) = e^(-λΔt)动态调整权重。

协同过滤就像数字世界的“物以类聚,人以群分”,但其威力远不止于此。在下一期我们将探讨如何融合深度学习,打造更强大的混合推荐模型,特别是在处理非结构化数据(如商品描述、评论)时的惊艳表现。

用户画像推荐系统协同过滤相似度计算Python实现
朗读
赞(0)
版权属于:

至尊技术网

本文链接:

https://www.zzwws.cn/archives/40675/(转载时请注明本文出处及文章链接)

评论 (0)