协同过滤推荐算法python实现
时间: 2024-02-05 14:07:59 浏览: 134
以下是基于物品的协同过滤推荐算法的Python实现:
```python
import numpy as np
# 创建一个用户-物品评分矩阵
ratings = np.array([[4, 0, 2, 0, 1],
[0, 2, 3, 0, 0],
[1, 0, 2, 4, 0],
[5, 0, 0, 3, 1],
[0, 0, 1, 5, 1]])
# 计算物品之间的相似度
def item_similarity(ratings):
# 计算物品之间的余弦相似度
sim = ratings.T.dot(ratings) / (np.sqrt(np.sum(ratings.T ** 2, axis=1)).reshape(-1, 1) * np.sqrt(np.sum(ratings ** 2, axis=1)))
return sim
# 预测目标用户对物品的评分
def predict(ratings, sim):
# 计算每个物品的平均评分
mean_ratings = np.sum(ratings, axis=0) / np.sum(ratings != 0, axis=0)
# 计算预测评分
pred = np.zeros(ratings.shape)
for i in range(ratings.shape[0]):
for j in range(ratings.shape[1]):
if ratings[i, j] == 0:
pred[i, j] = np.sum(sim[j, :] * (ratings[i, :] - mean_ratings) * (ratings[:, j] != 0)) / np.sum(np.abs(sim[j, :] * (ratings[:, j] != 0)))
return pred
# 测试
sim = item_similarity(ratings)
pred = predict(ratings, sim)
print(pred)
```
以上代码实现了一个简单的基于物品的协同过滤推荐算法,其中`ratings`是一个用户-物品评分矩阵,每行代表一个用户,每列代表一个物品,矩阵中的元素是用户对物品的评分。`item_similarity`函数计算物品之间的相似度,这里使用的是余弦相似度。`predict`函数预测目标用户对物品的评分,其中使用了加权平均的方法,权重是物品之间的相似度。
阅读全文