请用python实现协同过滤推荐算法
时间: 2023-09-23 15:11:35 浏览: 89
好的,可以使用Python的pandas和numpy库实现协同过滤推荐算法,大致步骤为:
1. 数据预处理:将用户和物品的原始评分数据转换成矩阵形式,进行缺失值填充或去除异常值。
2. 相似度计算:使用余弦相似度等方法计算用户或物品之间的相似度,并生成相似度矩阵。
3. 推荐计算:根据相似度矩阵和用户的历史行为数据,预测该用户对未评分物品的评分,生成推荐列表。
这里是一份简单的Python代码实现:
```
# 导入需要的库
import pandas as pd
import numpy as np
# 设置数据路径
data_file = 'ratings.csv'
# 读取数据,构建用户-物品评分矩阵
data = pd.read_csv(data_file)
rating_matrix = data.pivot(index='userId', columns='movieId', values='rating')
# 计算用户相似度矩阵(使用余弦相似度)
user_similarity = rating_matrix.corr(method='pearson')
# 选取K个最相似用户,为目标用户推荐M个未评分的物品
def recommend(user_id, K=10, M=5):
# 选取K个最相似的用户
similar_users = user_similarity[user_id].drop(user_id).sort_values(ascending=False)[:K]
# 获取目标用户已评分的物品
rated_items = rating_matrix.loc[user_id].dropna().index
# 生成推荐列表
recommend_items = []
for user in similar_users.index:
items = rating_matrix.loc[user].dropna().index
items = [item for item in items if item not in rated_items]
recommend_items.extend(items)
recommend_items = pd.Series(recommend_items).value_counts().sort_values(ascending=False)[:M]
return recommend_items.index.tolist()
# 测试
print(recommend(1))
```
这份代码只是一个简单的示例,实际使用中需要根据具体业务场景进行个性化定制,例如加入物品流行度、用户兴趣标签等因素,以提高预测准确率和推荐质量。
阅读全文