写一段协同过滤算法代码
时间: 2024-09-23 15:16:37 浏览: 20
协同过滤是一种常用的推荐系统算法,它基于用户对物品的评价数据来预测其他用户的喜好。这里提供一个简单的基于内存的用户相似度协同过滤Python代码示例:
```python
import numpy as np
class CollaborativeFiltering:
def __init__(self, num_users, num_items):
self.num_users = num_users
self.num_items = num_items
# 初始化用户-物品评分矩阵,假设所有用户对所有项目评分都是0
self.ratings = np.zeros((num_users, num_items))
def add_rating(self, user_id, item_id, rating):
self.ratings[user_id][item_id] = rating
def calculate_similarity(self, user_id, method='cosine'):
# 计算余弦相似度或其他相似度方法
if method == 'cosine':
dot_product = np.dot(self.ratings[user_id], self.ratings.T)
norm_user = np.linalg.norm(self.ratings[user_id])
norm_items = np.linalg.norm(self.ratings, axis=1)
similarity_matrix = dot_product / (norm_user * norm_items[:, np.newaxis])
else:
raise ValueError("Invalid similarity method")
return similarity_matrix
def recommend(self, user_id, top_n=10, method='cosine'):
similarities = self.calculate_similarity(user_id, method)
sorted_indices = np.argsort(-similarities) # 降序排序
# 排除已知喜好的项目
known_ratings = self.ratings[user_id]
known_indices = np.where(known_ratings != 0)[0]
sorted_indices = sorted_indices[~np.isin(sorted_indices, known_indices)]
recommendations = sorted_indices[:top_n]
return recommendations
# 使用示例
cf = CollaborativeFiltering(100, 500)
# 添加一些用户评分
cf.add_rating(0, 0, 4.0) # 用户0对项目0评分4.0
cf.add_rating(1, 1, 5.0) # 用户1对项目1评分5.0
recommendations = cf.recommend(0, top_n=5)
```
这个例子是一个基础版的协同过滤,实际应用中可能需要处理更复杂的数据结构、加入时间和衰减因子等优化。