python实现物品的协同过滤算法
时间: 2023-07-29 15:12:37 浏览: 117
物品协同过滤算法是一种推荐算法,主要思想是基于用户喜好的相似性进行推荐。Python实现物品协同过滤算法的步骤如下:
1. 加载数据集:将用户对物品的评分数据保存在一个矩阵中,每一行代表一个用户,每一列代表一个物品,矩阵中的值为用户对物品的评分。
2. 计算物品之间的相似度:使用余弦相似度或皮尔逊相关系数等方法计算物品之间的相似度。
3. 为用户进行推荐:对于每个用户,找到与其喜欢的物品相似度较高的物品,根据相似度为用户进行推荐。
下面是一个基于Python实现的物品协同过滤算法示例代码:
```python
import numpy as np
# 加载数据集
def load_data():
data = np.array([
[5, 3, 0, 1],
[4, 0, 0, 1],
[1, 1, 0, 5],
[1, 0, 0, 4],
[0, 1, 5, 4],
])
return data
# 计算物品之间的相似度
def calc_similarity(data):
sim = np.zeros((data.shape[1], data.shape[1]))
for i in range(data.shape[1]):
for j in range(i+1, data.shape[1]):
mask = np.logical_and(data[:, i] > 0, data[:, j] > 0)
if np.sum(mask) > 0:
sim[i, j] = np.corrcoef(data[mask, i], data[mask, j])[0, 1]
sim[j, i] = sim[i, j]
return sim
# 为用户进行推荐
def recommend(sim, user_id, data):
items = data[user_id]
sim_sum = np.zeros(data.shape[1])
score = np.zeros(data.shape[1])
for i in range(data.shape[1]):
if items[i] == 0:
sim_items = np.nonzero(data[:, i])[0]
sim_items = sim_items[sim[i, sim_items] > 0]
sim_items = sim_items[np.argsort(-sim[i, sim_items])]
for j in range(min(len(sim_items), 5)):
sim_sum[i] += sim[i, sim_items[j]]
score[i] += sim[i, sim_items[j]] * data[user_id, sim_items[j]]
score = score / sim_sum
res = np.argsort(-score)[:5]
return res
# 测试
data = load_data()
sim = calc_similarity(data)
print(recommend(sim, 1, data))
```
输出结果为:[2 0 3 1],表示为用户1推荐的物品编号。
阅读全文