协同过滤算法python代码实现
时间: 2023-10-28 17:00:02 浏览: 115
协同过滤算法是一种常用的推荐算法,可以根据用户的行为和兴趣来推荐相关的物品。下面是一个简单的基于用户的协同过滤算法的Python代码实现:
```python
import numpy as np
# 创建一个用户-物品矩阵
user_item_matrix = np.array([
[5, 3, 0, 1],
[4, 0, 0, 1],
[1, 1, 0, 5],
[1, 0, 0, 4],
[0, 1, 5, 4]
])
# 计算用户之间的相似度
def compute_similarity(user_item_matrix):
similarity_matrix = np.zeros((user_item_matrix.shape[0], user_item_matrix.shape[0]))
for i in range(user_item_matrix.shape[0]):
for j in range(user_item_matrix.shape[0]):
if i != j:
common_items = np.nonzero(user_item_matrix[i] * user_item_matrix[j])[0]
if len(common_items) > 0:
similarity_matrix[i][j] = np.sum(user_item_matrix[i][common_items] \
* user_item_matrix[j][common_items]) \
/ (np.sqrt(np.sum(user_item_matrix[i][common_items] ** 2)) \
* np.sqrt(np.sum(user_item_matrix[j][common_items] ** 2)))
return similarity_matrix
# 根据相似度进行推荐
def recommend(similarity_matrix, user_item_matrix, user_id):
scores = np.zeros(user_item_matrix.shape[1])
for i in range(user_item_matrix.shape[0]):
if i != user_id:
scores += similarity_matrix[user_id][i] * user_item_matrix[i]
rankings = np.argsort(scores)[::-1]
return rankings
# 测试推荐结果
similarity_matrix = compute_similarity(user_item_matrix)
user_id = 0
recommendations = recommend(similarity_matrix, user_item_matrix, user_id)
print("推荐物品的排序:", recommendations)
```
上述代码中,我们首先创建了一个用户-物品矩阵`user_item_matrix`,其中行代表用户,列代表物品,元素表示用户对物品的评分(0表示用户没有对该物品评分)。
然后,使用`compute_similarity`函数计算用户之间的相似度矩阵`similarity_matrix`,其中相似度使用余弦相似度进行计算。
最后,使用`recommend`函数根据相似度进行推荐,其中`user_id`表示待推荐的用户编号,返回一个按照推荐物品排序的列表。
在示例中,我们将用户0作为待推荐用户,输出了推荐物品的排序。你可以根据自己的需求进行修改和扩展。
阅读全文