电影数据推荐系统算法代码
时间: 2023-06-21 20:18:32 浏览: 115
电影推荐系统:SpringBoot、vue·基于物品的协同过滤算法,IDEA,mysql+源代码+文档说明+数据库sql
推荐系统算法代码一般包括数据预处理、模型训练和推荐结果生成三个部分。下面是一个简单的电影推荐系统的例子。
1. 数据预处理
首先,我们需要准备好电影数据。这里我们使用MovieLens数据集。我们将使用pandas库来读取和预处理数据。
```python
import pandas as pd
# 读取电影数据
movies_df = pd.read_csv('movies.csv')
# 只保留需要的列
movies_df = movies_df[['movieId', 'title']]
# 读取评分数据
ratings_df = pd.read_csv('ratings.csv')
# 只保留需要的列
ratings_df = ratings_df[['userId', 'movieId', 'rating']]
# 计算电影的平均评分
movie_ratings_df = ratings_df.groupby(['movieId']).mean()
# 合并电影数据和评分数据
movies_df = pd.merge(movies_df, movie_ratings_df, on='movieId')
# 将电影名称和ID映射为字典
title_to_movie_id = {}
movie_id_to_title = {}
for index, row in movies_df.iterrows():
title_to_movie_id[row['title']] = row['movieId']
movie_id_to_title[row['movieId']] = row['title']
```
2. 模型训练
我们将使用协同过滤算法来训练我们的推荐模型。这里我们使用Surprise库来实现。
```python
from surprise import Dataset, Reader
from surprise import KNNBasic
from surprise.model_selection import train_test_split
# 读取数据
reader = Reader(rating_scale=(0.5, 5.0))
data = Dataset.load_from_df(ratings_df[['userId', 'movieId', 'rating']], reader)
# 将数据随机分成训练集和测试集
trainset, testset = train_test_split(data, test_size=.25)
# 训练模型
algo = KNNBasic()
algo.fit(trainset)
```
3. 推荐结果生成
现在我们可以使用训练好的模型来生成推荐结果。这里我们将实现两个推荐功能:基于用户的协同过滤推荐和基于电影的相似性推荐。
```python
# 基于用户的协同过滤推荐
def user_based_recommendations(user_id):
# 获取该用户没有评分过的电影列表
unrated_movies = movies_df[~movies_df['movieId'].isin(ratings_df[ratings_df['userId'] == user_id]['movieId'])]
# 为每个电影计算预测评分
predictions = []
for index, row in unrated_movies.iterrows():
movie_id = row['movieId']
prediction = algo.predict(user_id, movie_id)
predictions.append((movie_id, prediction.est))
# 根据预测评分排序并返回前10个电影
predictions.sort(key=lambda x: x[1], reverse=True)
top_predictions = predictions[:10]
# 将电影ID转换为电影名称
recommended_movies = []
for movie_id, _ in top_predictions:
recommended_movies.append(movie_id_to_title[movie_id])
return recommended_movies
# 基于电影的相似性推荐
def movie_based_recommendations(movie_title):
# 找到与该电影相似的电影列表
movie_id = title_to_movie_id[movie_title]
movie_neighbors = algo.get_neighbors(movie_id, k=10)
# 将电影ID转换为电影名称
recommended_movies = []
for neighbor_id in movie_neighbors:
recommended_movies.append(movie_id_to_title[neighbor_id])
return recommended_movies
```
这样,我们就实现了一个简单的电影推荐系统。
阅读全文