使用协同过滤推荐算进行电影推荐的实现代码
时间: 2023-11-08 22:04:01 浏览: 43
好的,下面是一个使用基于用户的协同过滤推荐算法进行电影推荐的简单实现代码,供你参考:
```python
import pandas as pd
import numpy as np
# 加载数据集
ratings_df = pd.read_csv('ratings.csv', usecols=['userId', 'movieId', 'rating'], dtype={'userId': 'int32', 'movieId': 'int32', 'rating': 'float32'})
# 构建用户-电影评分矩阵
ratings_matrix = ratings_df.pivot_table(index=['userId'], columns=['movieId'], values='rating')
# 填充缺失值
ratings_matrix.fillna(0, inplace=True)
# 计算用户之间的相似度
from sklearn.metrics.pairwise import cosine_similarity
user_similarity = cosine_similarity(ratings_matrix)
# 根据用户之间的相似度,推荐电影
def get_similar_users(user_id, user_similarity, k=5):
# 找到相似度最高的k个用户
similar_users = np.argsort(user_similarity[user_id])[::-1][1:k+1]
return similar_users
def get_recommendations(user_id, ratings_matrix, user_similarity, k=5):
# 找到相似度最高的k个用户
similar_users = get_similar_users(user_id, user_similarity, k=k)
# 获取这k个用户喜欢的电影
similar_movies = ratings_matrix.iloc[similar_users].sum()
# 从这些电影中排除用户已经看过的电影
user_movies = ratings_matrix.iloc[user_id]
similar_movies = similar_movies.drop(user_movies[user_movies > 0].index)
# 按照评分从高到低排序,推荐评分最高的前n个电影
recommendations = similar_movies.sort_values(ascending=False)[:10]
return recommendations
```
以上代码中,我们首先加载了一个电影评分数据集,然后构建了一个用户-电影评分矩阵,并计算了用户之间的相似度。然后,我们定义了两个函数 `get_similar_users()` 和 `get_recommendations()`,其中 `get_similar_users()` 函数用于找到和当前用户相似度最高的k个用户,而 `get_recommendations()` 函数则是根据这k个用户喜欢的电影,来推荐给当前用户可能感兴趣的电影。最后,我们可以使用这些函数来进行电影推荐。
当然,以上代码只是一个简单的实现,实际应用中还需要考虑许多细节问题,如如何处理缺失值、如何调节相似度计算的参数等等。