协同过滤算法,Python代码
时间: 2023-11-19 08:56:49 浏览: 82
协同过滤算法是推荐系统中常用的算法之一,它可以根据用户的历史行为或偏好,向用户推荐相似的物品或用户。下面是一个基于Python的简单的协同过滤算法实现,代码如下:
```
import numpy as np
# 构造数据集
data = np.array([[4, 0, 2, 0, 1], [5, 5, 3, 0, 0], [1, 1, 0, 5, 2], [0, 0, 4, 0, 4], [2, 2, 0, 1, 0]])
# 计算相似度矩阵
def similarity(data):
m, n = data.shape
sim = np.zeros((n, n))
for i in range(n):
for j in range(n):
if i != j:
sim[i, j] = np.dot(data[:, i], data[:, j]) / (np.linalg.norm(data[:, i]) * np.linalg.norm(data[:, j]))
return sim
# 预测评分
def predict(data, sim, user, item):
m, n = data.shape
rating = 0
sim_sum = 0
for j in range(n):
if data[user, j] != 0 and j != item:
rating += sim[item, j] * data[user, j]
sim_sum += sim[item, j]
if sim_sum == 0:
return 0
else:
return rating / sim_sum
# 推荐物品
def recommend(data, sim, user):
m, n = data.shape
scores = []
for i in range(n):
if data[user, i] == 0:
score = predict(data, sim, user, i)
scores.append((i, score))
scores.sort(key=lambda x: x[1], reverse=True)
return scores
# 测试
sim = similarity(data)
user = 0
scores = recommend(data, sim, user)
print("用户%d的推荐物品为:" % user)
for i in range(3):
print("物品%d,预测评分为:%.2f" % (scores[i][0], scores[i][1]))
```
以上代码实现了一个简单的协同过滤算法,其中构造了一个5x5的数据集,代表5个用户对5个物品的评分。`similarity`函数计算了相似度矩阵,`predict`函数根据用户历史评分和物品相似度预测评分,`recommend`函数根据预测评分向用户推荐物品。最后,测试了用户0的推荐结果。
阅读全文