生成一段python代码,实现基于用户的协同过滤算法
时间: 2023-10-20 07:09:16 浏览: 92
好的,下面是一段Python代码实现基于用户的协同过滤算法:
```python
import numpy as np
# 用户-物品评分矩阵
ratings = np.array([[5, 3, 0, 1],
[4, 0, 0, 1],
[1, 1, 0, 5],
[1, 0, 0, 4],
[0, 1, 5, 4]])
# 计算相似度
def sim(x, y):
mask = np.logical_and(x > 0, y > 0)
if np.sum(mask) == 0:
return 0
return np.sum(x[mask] * y[mask]) / np.sqrt(np.sum(x[mask] ** 2) * np.sum(y[mask] ** 2))
# 计算相似度矩阵
sim_matrix = np.zeros((ratings.shape[0], ratings.shape[0]))
for i in range(ratings.shape[0]):
for j in range(ratings.shape[0]):
if i != j:
sim_matrix[i, j] = sim(ratings[i], ratings[j])
# 基于用户的协同过滤算法
def user_based_cf(user, item):
# 找出与该用户相似度最高的k个用户
k = 2
sims = sim_matrix[user]
topk_users = np.argsort(sims)[::-1][:k]
# 计算加权预测评分
ratings_sum = 0
sim_sum = 0
for i in topk_users:
if ratings[i, item] > 0:
ratings_sum += sim_matrix[user, i] * ratings[i, item]
sim_sum += sim_matrix[user, i]
if sim_sum == 0:
return 0
else:
return ratings_sum / sim_sum
# 使用该算法预测用户1对物品2的评分
print(user_based_cf(1, 2))
```
该代码实现了基于用户的协同过滤推荐算法,使用了numpy库进行向量计算,可以根据用户-物品评分矩阵来预测用户对某个物品的评分。
阅读全文