协同过滤推荐算法代码介绍
时间: 2023-09-09 07:14:06 浏览: 81
协同过滤推荐算法是一种基于用户行为历史数据进行推荐的方法,可以将用户分成若干个群组,然后对每个群组进行推荐。下面是一个简单的基于用户的协同过滤推荐算法示例代码:
```python
import numpy as np
# 创建一个用户-物品评分矩阵
user_item_matrix = np.array([
[4, 0, 3, 0, 5],
[5, 4, 0, 1, 0],
[0, 2, 4, 2, 0],
[0, 0, 4, 3, 5],
[0, 0, 0, 4, 4]
])
# 计算用户之间的相似度
def cosine_similarity(user_item_matrix):
sim = 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:
sim[i][j] = 1
else:
sim[i][j] = np.dot(user_item_matrix[i], user_item_matrix[j]) / (np.linalg.norm(user_item_matrix[i]) * np.linalg.norm(user_item_matrix[j]))
return sim
user_similarity = cosine_similarity(user_item_matrix)
# 使用相似度矩阵进行推荐
def item_recommendation(user_similarity, user_item_matrix, user_id, top_n):
# 找到与指定用户最相似的用户
most_similar_user = np.argsort(-user_similarity[user_id])[1]
# 找到该用户评分过的物品
items_rated_by_most_similar_user = np.where(user_item_matrix[most_similar_user] > 0)[0]
# 找到指定用户没有评分过的物品
items_not_rated_by_user = np.where(user_item_matrix[user_id] == 0)[0]
# 对指定用户没有评分过的物品进行预测评分
item_ratings = np.zeros(user_item_matrix.shape[1])
for item in items_not_rated_by_user:
item_ratings[item] = np.sum(user_similarity[user_id][items_rated_by_most_similar_user] * user_item_matrix[most_similar_user][items_rated_by_most_similar_user]) / np.sum(user_similarity[user_id][items_rated_by_most_similar_user])
# 找到预测评分最高的物品
top_items = np.argsort(-item_ratings)[:top_n]
return top_items
# 对指定用户进行物品推荐
user_id = 0
top_n = 2
recommended_items = item_recommendation(user_similarity, user_item_matrix, user_id, top_n)
print("Recommended items for user %d: %s" % (user_id, recommended_items))
```
上述代码中,首先创建了一个用户-物品评分矩阵,然后使用余弦相似度计算了用户之间的相似度矩阵。接下来,使用相似度矩阵进行推荐,对指定用户进行物品推荐。
具体来说,对于指定用户,首先找到与该用户最相似的用户,然后找到该用户评分过的物品和指定用户没有评分过的物品,对指定用户没有评分过的物品进行预测评分,最后找到预测评分最高的物品作为推荐结果。
阅读全文