请用python帮我写一个协同过滤推荐
时间: 2023-07-13 16:17:37 浏览: 75
好的,以下是一个简单的基于用户的协同过滤推荐系统的 Python 实现:
```python
import pandas as pd
# 构造用户评分数据
data = {
'用户1': {'电影1': 5, '电影2': 3, '电影3': 4, '电影4': 4},
'用户2': {'电影1': 3, '电影2': 1, '电影3': 2, '电影4': 3, '电影5': 3},
'用户3': {'电影1': 4, '电影3': 4, '电影4': 3, '电影5': 5},
'用户4': {'电影1': 3, '电影2': 1, '电影4': 5, '电影5': 4},
'用户5': {'电影2': 5, '电影3': 4, '电影4': 4, '电影5': 5}
}
ratings = pd.DataFrame(data)
# 计算用户之间的相似度
similarity = ratings.corr()
# 定义推荐函数
def recommend(user):
# 获取用户未评分的电影
unrated_movies = ratings.columns[ratings.loc[user].isnull()]
# 计算其他用户对这些电影的评分加权平均数
recommendations = similarity[user].drop(user). \
apply(lambda x: ratings[x.name][ratings[x.name].notnull()]. \
mean() * x).sum() / similarity[user].drop(user).sum()
# 返回推荐结果
return recommendations
# 测试推荐函数
print(recommend('用户1')) # 输出用户1的推荐结果
```
在上面的代码中,我们首先构造了一个用户评分数据,然后计算用户之间的相似度。接着定义了一个推荐函数,该函数接受一个用户名作为参数,返回该用户的推荐结果。最后,我们测试了推荐函数,输出了用户1的推荐结果。
请注意,这只是一个简单的示例,实际应用中需要考虑更多的因素,例如数据预处理、评价指标等。
阅读全文