import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity
# 1. 读取数据
data = pd.read_csv('u.data', sep='\t', names=['user_id', 'movie_id', 'rating', 'timestamp'])
print(data.head())
# 2. 创建用户-电影评分矩阵
ratings_df = pd.pivot_table(data, index='user_id', columns='movie_id', values='rating').fillna(0)
# 3. 计算用户之间的相似度(这里使用余弦相似度)
user_similarities = cosine_similarity(ratings_df.T)
# 4. 用户相关性分析 - 找出与特定用户最相似的前N个用户
target_user = '1' # 假设目标用户ID为1
n_top_users = 10
top_similar_users = user_similarities[ratings_df.index.get_loc(target_user)].argsort()[:-n_top_users - 1:-1]
print(f"与用户{target_user}最相似的前{n_top_users}个用户:", ratings_df.index[top_similar_users])
# 5. 协同过滤 - 基于用户相似度进行电影推荐
def recommend_movies(user_id, n_recommendations=10):
similar_scores = user_similarities[ratings_df.index.get_loc(user_id)]
similar_indices = similar_scores.argsort()[:-n_recommendations - 1:-1]
# 获取目标用户未观看过的电影
movies_seen_by_target_user = ratings_df.loc[user_id].nonzero()[1]
# 对于每个相似用户,找到他们看过但目标用户没看过的电影,并根据相似用户的评分加权求和
recommendations = {}
for i in similar_indices:
similar_user = ratings_df.index[i]
movies_seen_by_similar_user = ratings_df.loc[similar_user].nonzero()[1]
unseen_movies = list(set(movies_seen_by_similar_user) - set(movies_seen_by_target_user))
for movie in unseen_movies:
recommendations[movie] = recommendations.get(movie, 0) + ratings_df.loc[similar_user, movie] * \
similar_scores[i]
# 推荐得分最高的n部电影
sorted_recommendations = sorted(recommendations.items(), key=lambda x: x[1], reverse=True)
return [movie for movie, score in sorted_recommendations[:n_recommendations]]
# 6. 对目标用户进行电影推荐
recommended_movies = recommend_movies(target_user)
print(f"为用户{target_user}推荐的{10}部电影:", recommended_movies)
![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/295f29808f2c4866866b2b9589ea6b0c.png "#left")
错误在第18行,说是什么无法找到键值1
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- yyhff 2024-01-03 09:12关注
u.data 文件应该是csv格式,第一列的userid所对应的数据中,是否有值为1的数据? 如果没有,改代码为相对应的第一列的值
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 Opencv(C++)异常
- ¥15 VScode上配置C语言环境
- ¥15 汇编语言没有主程序吗?
- ¥15 这个函数为什么会爆内存
- ¥15 无法装系统,grub成了顽固拦路虎
- ¥15 springboot aop 应用启动异常
- ¥15 matlab有关债券凸性久期的代码
- ¥15 lvgl v8.2定时器提前到来
- ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
- ¥15 cam_lidar_calibration报错