python协同过滤电影推荐
时间: 2023-07-09 19:33:06 浏览: 87
基于协同过滤算法的电影推荐
Python实现协同过滤电影推荐可以分为以下几个步骤:
1. 数据预处理:将用户对电影的评分数据转换成矩阵的形式。
2. 相似度计算:计算用户之间或者电影之间的相似度,常用的相似度计算方法有欧几里得距离、余弦相似度等。
3. 预测评分:根据用户历史评分和相似度矩阵,预测用户对未评分电影的评分。
4. 推荐生成:根据预测评分,生成推荐列表。
下面是一个简单的代码示例:
```python
import numpy as np
# 用户评分数据
ratings = np.array([
[5, 3, 0, 1],
[4, 0, 4, 5],
[1, 1, 0, 4],
[0, 0, 5, 2],
[5, 4, 3, 0],
])
# 计算用户之间的余弦相似度
def cosine_similarity(x, y):
return np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
similarity = np.array([
[cosine_similarity(ratings[i], ratings[j]) for j in range(ratings.shape[0])]
for i in range(ratings.shape[0])
])
# 预测评分
def predict_rating(user_id, item_id):
user_ratings = ratings[user_id]
item_ratings = ratings[:, item_id]
sim_scores = similarity[user_id]
nonzero_indices = np.nonzero(item_ratings)
if len(nonzero_indices[0]) == 0:
return 0
item_ratings = item_ratings[nonzero_indices]
sim_scores = sim_scores[nonzero_indices]
return np.dot(user_ratings, sim_scores) / np.sum(sim_scores)
# 生成推荐列表
def generate_recommendations(user_id, n=3):
item_ratings = ratings[user_id]
nonzero_indices = np.nonzero(item_ratings == 0)
if len(nonzero_indices[0]) == 0:
return []
item_ratings = item_ratings[nonzero_indices]
item_ids = nonzero_indices[0]
predicted_ratings = [predict_rating(user_id, item_id) for item_id in item_ids]
top_indices = np.argsort(predicted_ratings)[::-1][:n]
return [(item_ids[i], predicted_ratings[i]) for i in top_indices]
# 输出用户1的推荐列表
print(generate_recommendations(1))
```
这段代码实现了一个简单的基于余弦相似度的协同过滤电影推荐系统。
阅读全文