协同过滤算法与智能推荐系统实战
协同过滤算法概述
协同过滤(Collaborative Filtering, CF)是构建智能推荐系统的核心算法之一。它依据用户群体对产品的偏好数据,发掘用户间或物品间的相似性,进而提供个性化推荐。
协同过滤的两大类
-
基于用户的协同过滤(User-based Collaborative Filtering)
- 寻找相似用户群体,推荐这些用户喜欢的产品给目标用户。
-
基于物品的协同过滤(Item-based Collaborative Filtering)
- 根据用户历史偏好,推荐类似物品。
商业应用倾向
- 用户规模大:用户数量庞大,而物品数量相对有限。
- 物品属性稳定:物品特征明确,用户评分长期有效。
相似度计算方法
欧式距离
∑ i = 1 n ( X i ( a ) − X i ( b ) ) 2 \sqrt{\sum_{i=1}^n(X_i^{(a)}-X_i^{(b)})^2} i=1∑n(Xi(a)−Xi(b))2
余弦相似度
余弦相似度的范围是[-1, 1],值越接近1表示向量越相似。
cos θ = x 1 y 1 + x 2 y 2 + … + x n y n x 1 2 + x 2 2 + … + x n 2 × y 1 2 + y 2 2 + … + y n 2 \cos\theta = \frac{x_1y_1 + x_2y_2 + \ldots + x_ny_n}{\sqrt{x_1^2+x_2^2+\ldots+x_n^2} \times \sqrt{y_1^2+y_2^2+\ldots+y_n^2}} cosθ=x12+x22+…+xn2×y12+y22+…+yn2x1y1+x2y2+…+xnyn
皮尔逊相关系数
描述两个数值型变量间线性相关的统计量,取值范围[-1, 1]。
r = C o v ( X , Y ) S X S Y r = \frac{Cov(X,Y)}{S_XS_Y} r=SXSYCov(X,Y)
实时效果反馈
相似度计算的Python实现
欧式距离
import numpy as np
df = pd.DataFrame([[5, 1, 5], [4, 2, 2]], columns=['A', 'B', 'C'])
dist = np.linalg.norm(df.iloc[0] - df.iloc[1])
余弦相似度
from sklearn.metrics.pairwise import cosine_similarity
item_similarity = cosine_similarity(df)
皮尔逊相关系数
from scipy.stats import pearsonr
corr, _ = pearsonr([1, 3, 5], [9, 8, 6])
智能推荐系统案例分析
背景介绍
视频平台通过智能推荐系统,根据用户对电影的评分,挖掘数据并个性化推荐类似电影,优化用户体验。
分析步骤
- 读取数据
- 数据分析
- 合并电影数据和评分数据
- 计算每部电影的评分均值和评分次数
- 创建数据透视表
智能推荐实现
以电影“阿甘正传(2031)”为例,计算与该电影的相关系数,筛选出评分次数超过20次的电影,并排序。
# 读取数据
movies = pd.read_excel('电影.xlsx')
score = pd.read_excel('评分.xlsx')
# 合并数据
df = pd.merge(movies, score, on='电影编号')
# 创建透视表
user_movie = df.pivot_table(index='用户编号', columns='名称', values='评分')
# 计算相关系数
FG = user_movie['阿甘正传(2031)']
corr_FG = user_movie.corrwith(FG)
similarity = pd.DataFrame(corr_FG, columns=['相关系数'])
# 筛选和排序
similarity = similarity[similarity['评分次数'] > 20].sort_values(by='相关系数', ascending=False).head(10)
结语
协同过滤算法在智能推荐系统中的应用广泛,通过精确计算用户或物品间的相似度,为用户带来个性化的推荐体验。本文介绍了协同过滤算法的原理、相似度计算方法,并通过Python实现及电影推荐系统的案例,展示了协同过滤算法的实战应用。