用python写一个基于物品的协同过滤推荐算法
时间: 2024-12-17 22:38:19 浏览: 34
在Python中,可以使用scikit-surprise库来实现基于物品的协同过滤推荐算法。这里以Item-Based Collaborative Filtering (用户-物品相似度)为例,步骤如下:
```python
from surprise import Dataset
from surprise import Reader
from surprise import ItemSimilarityMatrix
from surprise import KNNWithMeans
# 1. 设置数据读取器
reader = Reader(rating_scale=(1, 5)) # 假设评分范围在1到5之间
# 2. 加载数据集(通常是一个包含用户、物品和评分的CSV文件)
data = Dataset.load_from_file('ratings.csv', reader=reader)
# 3. 创建Surprise的数据对象
trainset = data.build_full_trainset()
# 4. 计算物品之间的相似度矩阵(常用的有皮尔逊相关系数、余弦相似度等)
sim_options = {'name': 'cosine', 'user_based': False} # 非用户基础,即物品基础
similarity_matrix = ItemSimilarityMatrix(trainset, sim_options=sim_options)
# 5. 使用KNNWithMeans算法,基于物品推荐
algo = KNNWithMeans(k=20) # k值表示考虑的邻居数量
algo.fit(similarity_matrix)
# 6. 获取用户ID,为其推荐物品
user_id = 'user1'
recommendations = algo.get_recommendations(user_id, N=10) # N表示推荐的数量
for item in recommendations:
print(f"推荐给{user_id}: {item['item_id']} - 评分预测值: {item['est']}")
阅读全文