基于用户的协同过滤算法代码
时间: 2023-10-20 11:45:36 浏览: 47
下面是一个基于用户的协同过滤推荐算法的 Python 代码示例:
```python
import numpy as np
# 创建用户-物品评分矩阵
ratings = np.array([
[5, 3, 0, 1, 4, 0],
[4, 0, 4, 4, 0, 0],
[1, 0, 5, 0, 0, 3],
[5, 2, 0, 0, 0, 5],
])
# 计算用户之间的相似度(使用余弦相似度)
def cosine_similarity(user1, user2):
numerator = np.dot(user1, user2)
denominator = np.linalg.norm(user1) * np.linalg.norm(user2)
return numerator / denominator
# 基于用户的协同过滤算法
def user_based_cf(user_id, ratings, k=2):
user = ratings[user_id]
similarities = []
# 计算用户之间的相似度
for i in range(len(ratings)):
if i != user_id:
similarity = cosine_similarity(user, ratings[i])
similarities.append((i, similarity))
# 根据相似度排序,选择前k个最相似的用户
similarities.sort(key=lambda x: x[1], reverse=True)
top_k_users = similarities[:k]
# 根据最相似的用户进行推荐
recommended_items = set()
for user_id, similarity in top_k_users:
items = np.where(ratings[user_id] > 0)[0]
recommended_items.update(items)
return recommended_items
# 示例使用
user_id = 0
recommended_items = user_based_cf(user_id, ratings, k=2)
print("用户", user_id, "的推荐物品:", recommended_items)
```
在这个示例中,我们首先创建了一个用户-物品评分矩阵,表示用户对不同物品的评分。然后定义了一个计算用户之间相似度的函数,使用余弦相似度进行计算。接下来是基于用户的协同过滤算法的函数,它根据用户之间的相似度选择出前k个最相似的用户,并根据这些用户的评分进行推荐。最后,给出了一个示例的使用。你可以根据实际情况进行修改和扩展。