基于协同过滤算法的智能推荐系统基础介绍
协同过滤算法概述
协同过滤算法的核心思想是通过用户或物品的相似性进行推荐。该算法主要分为两类:
- 基于用户的协同过滤(User-based Collaborative Filtering):寻找相似的用户群体,推荐他们喜欢的产品给目标用户。
- 基于物品的协同过滤(Item-based Collaborative Filtering):根据用户的历史偏好,推荐相似的物品。
算法优势
- 用户偏好挖掘:深入分析用户行为,挖掘潜在偏好。
- 个性化推荐:为每个用户提供定制化的内容推荐。
- 提高用户粘性:通过推荐用户感兴趣的内容,提高用户活跃度和忠诚度。
协同过滤算法的原理
根据用户群体对产品偏好的数据,发现用户之间的相似性或者物品之间的相似性,并基于这些相似性为用户作推荐。
- 基于用户的协同过滤算法(User-based Collaborative Filtering)
其本质是:寻找相似的用户,进而对用户推荐相似用户关注的产品。
如下表所示,用户1和用户2都给商品A,B,C打了高分,那么可以将用户1和用户2划分在同一个用户群体,此时若用户2还给商品D打了高分,那么就可以将商品D推荐给用户1。
- 基于物品的协同过滤算法(Item-based Collaborative Filtering)
其本质是:根据用户的历史偏好信息,将类似的物品推荐给用户
如下表所示,图书A和图书B都被用户1,2,3购买过(1表示购买,0表示未购买),那么可以认为图书A和图书B具有较强的相似度,即可判断喜欢图书A的用户同样也会喜欢图书B。当用户4购买图书B时,根据图书A和图书B的相似性,可将图书A推荐给用户4。
在商业实战中,大多应用场景偏向于使用基于物品的协同过滤算法。主要有如下两个原因:
原因一:通常用户的数量是非常庞大的(如淘宝数亿的用户群体),而物品的数量相对有限,因此计算不同物品之间的相似度往往比计算不同用户的相似度容易很多。
原因二:用户的喜好较为多变,而物品属性较明确不随时间变化,过去用户对物品的评分长期有效,所以物品间的相似度比较固定,因此可以预先离线计算好物品间的相似度,把结果存在表中,向客户进行推荐时再使用。
相似度计算方法
构建协同过滤推荐系统的关键步骤是计算用户或物品之间的相似度。以下是几种常用的相似度计算方法:
1. 欧式距离
用于计算两个多维样本点的直线距离。
import numpy as np
df = pd.DataFrame([[5, 1, 5], [4, 2, 2]], columns=['特征1', '特征2', '特征3'])
dist = np.linalg.norm(df.iloc[0] - df.iloc[1])
2. 余弦相似度
衡量两个向量方向上的相似性,常用于文本分析和物品推荐。
from sklearn.metrics.pairwise import cosine_similarity
item_similarity = cosine_similarity(df)
pd.DataFrame(item_similarity, columns=['物品A', '物品B'], index=['物品A', '物品B'])
3. 皮尔逊相关系数
衡量两个变量间的线性相关性,取值范围为[-1, 1]。
from scipy.stats import pearsonr
X = [1, 3, 5, 7, 9]
Y = [9, 8, 6, 4, 2]
corr, _ = pearsonr(X, Y)
智能推荐系统的构建步骤
1. 数据准备
首先,需要收集用户对物品的评分数据以及物品的相关信息。
2. 数据分析
对收集的数据进行预处理,如去除缺失值、计算每部电影的评分均值和评分次数。
3. 相似度计算
使用上述相似度计算方法,计算物品之间的相似度。
4. 智能推荐
根据计算得到的相似度,为用户推荐与其历史偏好相似的物品。
代码实现
以下是构建智能推荐系统的示例代码:
import pandas as pd
# 读取数据
movies = pd.read_excel('movies.xlsx')
scores = pd.read_excel('scores.xlsx')
# 合并数据
df = pd.merge(movies, scores, on='MovieId')
# 计算每部电影的评分均值和评分次数
ratings_mean = df.groupby('Title')['Score'].mean().reset_index()
ratings_mean['RatingCount'] = df.groupby('Title')['Score'].count().reset_index()
# 创建透视表
pivot_table = df.pivot_table(index='UserId', columns='Title', values='Score')
# 以特定电影为例进行推荐
target_movie = 'Forrest Gump (1994)'
FG_scores = pivot_table[target_movie]
# 计算与目标电影的相关系数
similarity_scores = pivot_table.corrwith(FG_scores)
# 筛选高评分次数的电影并排序
recommendations = similarity_scores.merge(
ratings_mean,
left_index=True,
right_on='Title',
suffixes=('', '_merge')
).sort_values(by='RatingCount', ascending=False).head(10)
智能推荐系统通过分析用户行为和偏好,为用户提供个性化的内容推荐,有效提升用户体验和平台收益。本文简单介绍了协同过滤算法的原理、相似度计算方法,并结合代码示例,展示了如何构建一个基于物品的智能推荐系统。随着技术的不断进步,推荐系统将变得更加智能和精准,为用户带来更加丰富的个性化体验。