以下是一个简单的示例代码,使用减半的MovieLens数据集实现基于用户的电影推荐:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics.pairwise import cosine_similarity

# 加载MovieLens数据集
movies = pd.read_csv('movies.csv')
ratings = pd.read_csv('ratings.csv')

# 合并电影和评分数据集
movie_ratings = pd.merge(movies, ratings, on='movieId')

# 计算每部电影的平均评分
movie_avg_ratings = movie_ratings.groupby('movieId')['rating'].mean().reset_index()

# 选择前一半电影的ID
half_movies = movie_avg_ratings.head(len(movie_avg_ratings) // 2)['movieId']

# 筛选出前一半电影的评分数据
half_ratings = ratings[ratings['movieId'].isin(half_movies)]

# 将数据集划分为训练集和测试集
train, test = train_test_split(half_ratings, test_size=0.2)

# 创建用户-电影评分矩阵
user_movie_matrix = train.pivot_table(index='userId', columns='movieId', values='rating')

# 使用余弦相似度计算用户之间的相似度
user_similarity = cosine_similarity(user_movie_matrix.fillna(0))

# 根据用户相似度和评分预测电影评分
def predict_rating(user_id, movie_id):
    similarity_scores = user_similarity[user_id-1]
    movie_ratings = user_movie_matrix.loc[:, movie_id]
    non_nan_ratings = movie_ratings[pd.notnull(movie_ratings)]
    
    if len(non_nan_ratings) == 0:
        return None
    
    weighted_sum = np.dot(similarity_scores, non_nan_ratings)
    weight_sum = np.sum(np.abs(similarity_scores))
    
    if weight_sum == 0:
        return None
    
    predicted_rating = weighted_sum / weight_sum
    return predicted_rating

# 为指定用户推荐电影
def recommend_movies(user_id, top_n=5):
    unrated_movies = movie_avg_ratings[~movie_avg_ratings['movieId'].isin(user_movie_matrix.columns)]
    unrated_movies['predicted_rating'] = unrated_movies['movieId'].apply(lambda x: predict_rating(user_id, x))
    recommended_movies = unrated_movies.sort_values('predicted_rating', ascending=False).head(top_n)
    
    return recommended_movies

# 为用户1推荐电影
recommendations = recommend_movies(1)
print(recommendations)

请确保已经下载并解压了减半的MovieLens数据集,并将'movies.csv'和'ratings.csv'文件放在代码所在的目录中。此代码首先加载电影和评分数据集,并将它们合并在一起。然后,它筛选出前一半电影的评分数据,并将数据集划分为训练集和测试集。接下来,代码创建用户-电影评分矩阵,并使用余弦相似度计算用户之间的相似度。最后,代码使用相似度和评分预测用户对未评分电影的评分,并根据预测评分为用户推荐电影。

请注意,这只是一个简单的示例代码,你可能需要根据实际需求进行适当的修改。此外,这个示例使用了基于用户的协同过滤推荐算法,可能还有其他更复杂的推荐算法可供选择。

基于用户协同过滤的电影推荐算法:使用减半MovieLens数据集实现

原文地址: https://www.cveoy.top/t/topic/kNN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录