代码实现协同过滤构建简单的电影推荐系统
时间: 2023-10-09 21:10:10 浏览: 96
基于python+Django和协同过滤算法的电影推荐系统+源码(毕业设计&课程设计&项目开发)
好的,下面是一个简单的电影推荐系统的代码实现,使用协同过滤算法:
```python
import pandas as pd
import numpy as np
# 读取数据集
movies_df = pd.read_csv('movies.csv')
ratings_df = pd.read_csv('ratings.csv')
# 去除掉电影数据集中的无用信息
movies_df = movies_df.drop(['genres'], axis=1)
# 将用户评分数据集按照时间排序
ratings_df = ratings_df.sort_values(by='timestamp')
# 计算每个用户给每个电影的评分平均值
ratings_df_mean = ratings_df.groupby(by='userId', as_index=False)['rating'].mean()
# 将每个用户的平均评分和原始评分数据合并到一个数据集中
ratings_df = pd.merge(ratings_df, ratings_df_mean, on='userId')
ratings_df['rating_adjusted'] = ratings_df['rating_x'] - ratings_df['rating_y']
# 将用户评分数据集转换为矩阵形式
ratings_matrix = ratings_df.pivot_table(index='userId', columns='movieId', values='rating_adjusted')
# 填充缺失值
ratings_matrix = ratings_matrix.fillna(0)
# 计算电影之间的相似度
movie_similarity_matrix = np.corrcoef(ratings_matrix.T)
# 根据相似度矩阵,推荐电影给指定用户
def get_movie_recommendations(user_id):
# 获取该用户评分过的电影列表
user_ratings = ratings_matrix.loc[user_id].values
# 计算每个电影与该用户评分过的电影之间的相似度
movie_similarity = movie_similarity_matrix.dot(user_ratings)
# 将相似度排序,得到推荐的电影列表
similar_indexes = movie_similarity.argsort()[::-1]
recommended_movies = []
for i in similar_indexes:
if ratings_matrix.iloc[user_id][i] == 0:
recommended_movies.append(movies_df.loc[movies_df['movieId'] == i]['title'].values[0])
return recommended_movies
```
其中,`movies.csv` 和 `ratings.csv` 是电影数据集和用户评分数据集,可以从网上下载。使用该代码实现时,只需要调用 `get_movie_recommendations(user_id)` 函数并传入指定用户的 ID 即可得到该用户的推荐电影列表。
阅读全文