协同过滤算法美食推荐代码python
时间: 2024-03-09 09:42:51 浏览: 194
协同过滤算法是一种常用的推荐算法,它基于用户之间的相似性或者物品之间的相似性来进行推荐。下面是一个简单的协同过滤算法的美食推荐代码示例(使用Python语言):
```python
import numpy as np
# 创建用户-物品评分矩阵
ratings = np.array([
[5, 3, 0, 1],
[4, 0, 4, 4],
[1, 1, 0, 5],
[0, 0, 4, 0],
[2, 2, 1, 0]
])
# 计算用户之间的相似度(使用余弦相似度)
def cosine_similarity(user1, user2):
dot_product = np.dot(user1, user2)
norm_user1 = np.linalg.norm(user1)
norm_user2 = np.linalg.norm(user2)
return dot_product / (norm_user1 * norm_user2)
# 根据用户相似度进行推荐
def recommend(user_id, ratings, similarity_func):
num_users = ratings.shape[0]
sim_scores = []
for i in range(num_users):
if i != user_id:
sim_score = similarity_func(ratings[user_id], ratings[i])
sim_scores.append((i, sim_score))
sim_scores.sort(key=lambda x: x[1], reverse=True)
# 找到与目标用户最相似的用户
most_similar_user = sim_scores[0][0]
# 找到目标用户没有评分的物品
unrated_items = np.where(ratings[user_id] == 0)[0]
# 根据最相似用户的评分进行推荐
recommendations = []
for item in unrated_items:
if ratings[most_similar_user][item] > 0:
recommendations.append((item, ratings[most_similar_user][item]))
recommendations.sort(key=lambda x: x[1], reverse=True)
return recommendations
# 示例使用
user_id = 0
recommendations = recommend(user_id, ratings, cosine_similarity)
print("用户", user_id, "的美食推荐:")
for item, rating in recommendations:
print("物品", item, "评分:", rating)
```
这段代码中,我们首先创建了一个用户-物品评分矩阵,然后定义了一个计算用户之间相似度的函数(这里使用余弦相似度),接着编写了一个根据用户相似度进行推荐的函数。最后,我们选择一个目标用户,调用推荐函数得到该用户的美食推荐结果。
阅读全文