基于用户协同过滤算法代码
时间: 2024-05-25 14:09:16 浏览: 173
用户协同过滤算法是一种常见的推荐算法,它通过分析用户之间的相似性,来给用户推荐相似用户喜欢的物品。具体实现方式是,首先根据用户之间的历史行为数据(如购买记录、评分记录等),计算用户之间的相似度,然后利用相似用户的历史行为数据,推荐给目标用户他们喜欢的物品。
下面是一个简单的基于用户协同过滤算法的Python代码:
```python
import numpy as np
# 历史行为数据
data = np.array([
[5, 3, 0, 1, 4],
[1, 0, 0, 5, 1],
[4, 3, 0, 0, 5],
[0, 1, 5, 4, 4],
[5, 4, 4, 0, 0]
])
# 计算用户相似度
def similarity(user1, user2):
return np.dot(user1, user2) / (np.linalg.norm(user1) * np.linalg.norm(user2))
# 给定目标用户id,计算推荐物品列表
def recommend(target_id):
target_user = data[target_id]
similarities = []
for i in range(len(data)):
if i != target_id:
sim = similarity(target_user, data[i])
similarities.append((i, sim))
similarities.sort(key=lambda x: x, reverse=True)
top_similarities = similarities[:2]
recommended_items = []
for item_id in range(len(target_user)):
if target_user[item_id] == 0:
score = 0
count = 0
for sim_id, sim_score in top_similarities:
if data[sim_id][item_id] != 0:
score += sim_score * data[sim_id][item_id]
count += sim_score
if count > 0:
recommended_items.append((item_id, score/count))
recommended_items.sort(key=lambda x: x, reverse=True)
return recommended_items
# 测试代码
print(recommend(0)) # 给id为0的用户推荐物品
```
代码中的`data`是历史行为数据矩阵,其中每一行表示一个用户对各个物品的行为数据,0表示未有行为。`similarity`函数用于计算两个用户之间的相似度,这里采用的是余弦相似度计算方法。`recommend`函数则是用于给定目标用户id,计算出推荐的物品列表。
阅读全文