user_behavior = { '王一': {'《哪吒》': 3.5, '《我不是药神》': 4.5}, '王二': {'《深海》': 3.5, '《长津湖》': 4.5}, '王三': {'《疯狂动物城》': 4.0, '《人生大事》': 3.5, '《这个杀手不太冷静》': 4.0} } # 计算用户之间的相似度 def cal_user_sim(user_behavior): sim_matrix = {} for user1 in user_behavior: sim_matrix[user1] = {} for user2 in user_behavior: if user1 == user2: continue sim_matrix[user1][user2] = len(set(user_behavior[user1].keys()) & set(user_behavior[user2].keys())) return sim_matrix # 找到与目标用户最相似的K个用户 def find_top_k_sim_users(user_sim, target_user, k=2): sim_users = sorted(user_sim[target_user].items(), key=lambda x: x[1], reverse=True)[:k] return sim_users # 推荐电影给目标用户 def recommend_movies(user_behavior, user_sim, target_user, k=2): sim_users = find_top_k_sim_users(user_sim, target_user, k) movie_list = [] for user, sim in sim_users: for movie in user_behavior[user]: if movie not in user_behavior[target_user]: movie_list.append((movie, user_behavior[user][movie] * sim)) movie_list = sorted(movie_list, key=lambda x: x[1], reverse=True) return [movie[0] for movie in movie_list][:k] # 测试推荐算法 user_sim = cal_user_sim(user_behavior) print("请输入用户:") target_user = input() rec_movies = recommend_movies(user_behavior, user_sim, target_user, k=2) print(f"为用户{target_user}推荐的电影是:{rec_movies}")。将这个代码,每一行都给出解释,说明为什么这么做代码?
时间: 2024-03-30 10:34:57 浏览: 102
这段代码是一个简单的电影推荐系统实现。下面是每一行的解释:
```python
user_behavior = { '王一': {'《哪吒》': 3.5, '《我不是药神》': 4.5}, '王二': {'《深海》': 3.5, '《长津湖》': 4.5}, '王三': {'《疯狂动物城》': 4.0, '《人生大事》': 3.5, '《这个杀手不太冷静》': 4.0} }
```
定义了一个字典变量 user_behavior,其中包含每个用户对不同电影的评分。
```python
def cal_user_sim(user_behavior):
sim_matrix = {}
for user1 in user_behavior:
sim_matrix[user1] = {}
for user2 in user_behavior:
if user1 == user2:
continue
sim_matrix[user1][user2] = len(set(user_behavior[user1].keys()) & set(user_behavior[user2].keys()))
return sim_matrix
```
定义一个函数 cal_user_sim,计算用户之间的相似度。函数中使用了余弦相似度的计算公式,通过计算用户对同一电影的评分进行相似度计算,并将结果存储在一个字典变量 sim_matrix 中。
```python
def find_top_k_sim_users(user_sim, target_user, k=2):
sim_users = sorted(user_sim[target_user].items(), key=lambda x: x[1], reverse=True)[:k]
return sim_users
```
定义一个函数 find_top_k_sim_users,找到与目标用户最相似的 K 个用户。函数中通过对相似度矩阵进行排序,找到与目标用户最相似的 K 个用户,并将结果存储在一个列表变量 sim_users 中。
```python
def recommend_movies(user_behavior, user_sim, target_user, k=2):
sim_users = find_top_k_sim_users(user_sim, target_user, k)
movie_list = []
for user, sim in sim_users:
for movie in user_behavior[user]:
if movie not in user_behavior[target_user]:
movie_list.append((movie, user_behavior[user][movie] * sim))
movie_list = sorted(movie_list, key=lambda x: x[1], reverse=True)
return [movie[0] for movie in movie_list][:k]
```
定义一个函数 recommend_movies,推荐电影给目标用户。函数中首先调用了 find_top_k_sim_users 函数,找到与目标用户最相似的 K 个用户。然后遍历这些用户对电影的评分,找到目标用户没有看过的电影,并计算这些电影的推荐值。最后通过推荐值进行排序,返回前 K 个推荐电影。
```python
user_sim = cal_user_sim(user_behavior)
print("请输入用户:")
target_user = input()
rec_movies = recommend_movies(user_behavior, user_sim, target_user, k=2)
print(f"为用户{target_user}推荐的电影是:{rec_movies}")
```
在主程序中,首先调用 cal_user_sim 函数计算用户之间的相似度矩阵,然后通过 input 函数获取用户输入的目标用户,最后调用 recommend_movies 函数推荐电影,并输出结果。
阅读全文