构建推荐系统通常涉及以下步骤:
数据准备:
加载数据集,并进行预处理。
相似度计算:
计算用户或项目之间的相似度。
推荐生成:
根据相似度为用户推荐项目。
下面是一个基于用户的协同过滤推荐系统的简单示例,使用Python和`pandas`、`scikit-learn`库实现:
import pandas as pd
from sklearn.model_selection import train_test_split
from 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."
获取未评价过的电影ID
unrated_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]
获取推荐电影的ID
recommended_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`三列。在实际应用中,你可能需要根据你的数据集调整代码。此外,你可能还想考虑使用更复杂的相似度度量方法,如皮尔逊相关系数,以及更高级的推荐算法,如矩阵分解或深度学习模型。