请用协同过滤算法做一个电影推荐系统 代码实现
时间: 2023-09-24 14:02:50 浏览: 96
基于协同过滤算法的电影推荐系统
5星 · 资源好评率100%
好的,下面是使用Python实现基于用户的协同过滤算法的电影推荐系统的代码:
```python
import pandas as pd
import numpy as np
# 加载数据
ratings_data = pd.read_csv("ratings.csv")
movies_data = pd.read_csv("movies.csv")
# 将电影名称和用户ID进行编码
ratings_data["user_id"] = ratings_data["userId"].apply(lambda x: str(x))
ratings_data["movie_id"] = ratings_data["movieId"].apply(lambda x: str(x))
movies_data["movie_id"] = movies_data["movieId"].apply(lambda x: str(x))
# 构建用户电影评分矩阵
ratings_matrix = pd.pivot_table(ratings_data, values="rating", index="user_id", columns="movie_id")
# 计算用户之间的相似度
user_similarity_matrix = ratings_matrix.corr(method="pearson")
# 定义推荐函数
def recommend_movies(user_id, num_recommendations):
# 找到与目标用户最相似的K个用户
similar_users = user_similarity_matrix[user_id].sort_values(ascending=False)[1:num_recommendations+1]
# 找到这K个用户喜欢的电影
similar_users_ratings = ratings_matrix.loc[similar_users.index]
avg_ratings = similar_users_ratings.mean(axis=0)
# 推荐目标用户可能喜欢的电影
movies_to_recommend = avg_ratings.drop(ratings_matrix.loc[user_id].dropna().index).sort_values(ascending=False)[:10]
recommended_movies = movies_data.loc[movies_data["movie_id"].isin(movies_to_recommend.index)]
return recommended_movies
# 测试推荐函数
recommendations = recommend_movies(user_id="1", num_recommendations=10)
print(recommendations)
```
这段代码首先加载了电影评分数据和电影信息数据,然后将电影名称和用户ID进行编码。接着,构建了用户电影评分矩阵,并利用皮尔逊相关系数计算了用户之间的相似度。最后,定义了一个推荐函数,它根据目标用户的历史评分记录,找到与目标用户最相似的K个用户,然后推荐这K个用户喜欢的电影中目标用户未看过的电影。最后,利用测试数据测试了推荐函数,并输出了推荐结果。
如果要实现基于物品的协同过滤算法的电影推荐系统,代码也类似,只需要修改一些细节即可。
阅读全文