构建推荐系统通常涉及以下步骤:
数据准备:
加载数据集,并进行预处理。
相似度计算:
计算用户或项目之间的相似度。
推荐生成:
根据相似度为用户推荐项目。
下面是一个基于用户的协同过滤推荐系统的简单示例,使用Python和`pandas`、`scikit-learn`库实现:
import pandas as pdfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics.pairwise import cosine_similarity加载数据集data = pd.read_csv('ratings.csv') 假设数据集包含userId, movieId和rating三列拆分数据集为训练集和测试集train_data, test_data = train_test_split(data, test_size=0.2, random_state=42)计算用户之间的相似度def calculate_similarity(train_data):创建用户-项目评分矩阵user_item_matrix = train_data.pivot(index='userId', columns='movieId', values='rating')计算用户间的余弦相似度user_similarity = cosine_similarity(user_item_matrix)return user_similarity获取用户相似度矩阵user_similarity = calculate_similarity(train_data)对于每个用户,选择他们已经互动过的项目对于在步骤5a中选择的每个项目,检索与所有其他项目的相似度分数使用用户的评分作为权重,计算相似度分数的加权平均值根据加权相似度分数按降序对项目进行排序向用户推荐前N个项目def recommend_items(user_id, user_similarity, train_data, movie_titles, N=10):获取该用户已经评价过的电影rated_movies = train_data[train_data['userId'] == user_id]if rated_movies.empty:return "No rated movies found for this user."获取未评价过的电影IDunrated_movies = movie_titles[~movie_titles['movieId'].isin(rated_movies['movieId'])]获取未评价过的电影索引unrated_movies_indices = unrated_movies.index初始化推荐列表recommendations = []遍历未评价过的电影for movie_index in unrated_movies_indices:获取推荐电影的索引recommended_movie_index = np.argsort(user_similarity[user_id])[::-1][0:N+1]获取推荐电影的IDrecommended_movie_ids = unrated_movies.loc[recommended_movie_index, 'movieId'].tolist()获取推荐电影的标题recommended_movie_titles = movie_titles.loc[recommended_movie_index, 'title'].tolist()将推荐信息添加到推荐列表recommendations.append((recommended_movie_ids, recommended_movie_titles))return recommendations示例使用recommended_items_list = recommend_items(user_id=1, user_similarity=user_similarity, train_data=train_data, movie_titles=movie_titles)for item_ids, item_titles in recommended_items_list:print(f"Recommended movies for user 1: {item_titles}")
请注意,这个示例使用了MovieLens数据集,并且假设数据集包含`userId`、`movieId`和`rating`三列。在实际应用中,你可能需要根据你的数据集调整代码。此外,你可能还想考虑使用更复杂的相似度度量方法,如皮尔逊相关系数,以及更高级的推荐算法,如矩阵分解或深度学习模型。

