协同过滤推荐算法代码案例
时间: 2024-06-16 07:06:14 浏览: 130
协同过滤是一种常用的推荐算法,它基于用户行为数据或者项目属性数据来进行推荐。下面是一个简单的协同过滤推荐算法的代码案例:
```python
import numpy as np
# 创建用户-物品评分矩阵
ratings = np.array([
[5, 3, 0, 1],
[4, 0, 4, 4],
[1, 1, 0, 5],
[0, 0, 4, 0],
[2, 2, 1, 0]
])
# 计算用户之间的相似度(使用余弦相似度)
def cosine_similarity(user1, user2):
dot_product = np.dot(user1, user2)
norm_user1 = np.linalg.norm(user1)
norm_user2 = np.linalg.norm(user2)
return dot_product / (norm_user1 * norm_user2)
# 根据用户相似度进行推荐
def recommend(user_id, ratings, similarity_func):
num_users = ratings.shape
sim_scores = []
for i in range(num_users):
if i != user_id:
sim_score = similarity_func(ratings[user_id], ratings[i])
sim_scores.append((i, sim_score))
sim_scores.sort(key=lambda x: x, reverse=True)
# 取相似度最高的前K个用户
K = 2
top_k_users = sim_scores[:K]
# 计算加权平均得分
item_scores = np.zeros(ratings.shape)
for user, sim_score in top_k_users:
item_scores += sim_score * ratings[user]
# 过滤掉已经评分过的物品
unrated_items = np.where(ratings[user_id] == 0)
recommended_items = sorted([(item, score) for item, score in enumerate(item_scores) if item in unrated_items], key=lambda x: x, reverse=True)
return recommended_items
# 示例:为用户0推荐物品
recommended_items = recommend(0, ratings, cosine_similarity)
print("为用户0推荐的物品:", recommended_items)
```
这个代码案例中,我们首先创建了一个用户-物品评分矩阵,然后定义了一个计算用户相似度的函数(使用余弦相似度)。接着,我们实现了一个推荐函数,根据用户相似度来为指定用户推荐物品。最后,我们调用推荐函数为用户0推荐物品,并打印出结果。
阅读全文