python协同过滤推荐代码详细
时间: 2023-05-29 16:05:33 浏览: 117
由于协同过滤推荐算法的实现方法有很多种,所以我提供一种基于用户的协同过滤推荐算法的Python代码实现:
1. 数据准备
首先,我们需要准备一个用户-物品评分矩阵,其中每一行代表一个用户对物品的评分,每一列代表一个物品。这里我们使用Pandas库来读取数据文件并构建评分矩阵:
import pandas as pd
# 读取数据文件
df = pd.read_csv('ratings.csv')
# 构建评分矩阵
ratings = pd.pivot_table(df, values='rating', index='userId', columns='movieId')
2. 相似度计算
接下来,我们需要计算用户之间的相似度。这里我们使用余弦相似度来衡量用户之间的相似度。具体算法实现如下:
from sklearn.metrics.pairwise import cosine_similarity
# 计算用户相似度
user_similarity = cosine_similarity(ratings.fillna(0))
3. 推荐算法
最后,我们可以根据用户之间的相似度来进行推荐。具体算法实现如下:
# 定义推荐函数
def recommend(user_id, ratings, user_similarity, num_recommendations):
# 计算用户之间的相似度
similarity_scores = pd.Series(user_similarity[user_id])
# 获取用户未评分的电影
user_ratings = ratings.loc[user_id].fillna(0)
unrated_movies = user_ratings[user_ratings == 0].index
# 计算每部电影的推荐分数
scores = ratings.loc[:, unrated_movies].apply(lambda x: similarity_scores.dot(x.fillna(0)), axis=0)
# 按照推荐分数排序并返回前N个推荐结果
return scores.sort_values(ascending=False)[:num_recommendations]
# 测试推荐函数
recommend(1, ratings, user_similarity, 5)
上述代码中,我们定义了一个推荐函数recommend,该函数接受四个参数:用户ID、评分矩阵、用户相似度和推荐结果数量。首先,我们计算用户之间的相似度,并获取该用户未评分的电影。然后,我们计算每部电影的推荐分数,按照推荐分数排序并返回前N个推荐结果。
参考资料:
- https://github.com/llSourcell/recommender_live/blob/master/Recommender-Collaborative.ipynb
- https://github.com/llSourcell/recommender_live/blob/master/Recommender-Content.ipynb
阅读全文