欢迎访问宙启技术站
智能推送

使用sklearn进行推荐系统搭建

发布时间:2024-01-20 19:08:59

推荐系统是一种根据用户的特征和历史行为,为其推荐感兴趣的物品的系统。使用机器学习技术可以帮助我们构建推荐系统。sklearn是一个常用的机器学习库,也可以用来构建推荐系统。

下面以电影推荐系统为例,介绍如何使用sklearn构建推荐系统。

首先,我们需要准备数据集。这里使用了MovieLens数据集,包含了用户对电影的评分数据。

import pandas as pd

# 读取数据集
ratings = pd.read_csv('ratings.csv')
movies = pd.read_csv('movies.csv')

# 合并数据集
data = pd.merge(ratings, movies, on='movieId')

接下来,我们需要将数据集进行预处理,将用户的评分数据转换成一个矩阵表示。可以使用sklearn的LabelEncoder将用户ID和电影ID转换为整数类型。

from sklearn.preprocessing import LabelEncoder

# 将用户ID和电影ID进行整数编码
le_user = LabelEncoder()
le_movie = LabelEncoder()
data['userId'] = le_user.fit_transform(data['userId'])
data['movieId'] = le_movie.fit_transform(data['movieId'])

然后,我们需要将数据集分割为训练集和测试集,用训练集训练模型,并用测试集评估模型的性能。

from sklearn.model_selection import train_test_split

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(data[['userId', 'movieId']], data['rating'], test_size=0.2, random_state=42)

# 训练模型
from sklearn.ensemble import RandomForestRegressor

model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 预测评分
y_pred = model.predict(X_test)

# 评估模型性能
from sklearn.metrics import mean_squared_error

mse = mean_squared_error(y_test, y_pred)
print('均方误差:', mse)

最后,我们可以使用训练好的模型进行推荐。给定一个用户ID,我们可以根据其历史评分和电影ID,预测用户对其他未评分电影的评分,并推荐评分较高的电影。

# 从数据集中选择一个用户
user_id = data['userId'].sample(1).iloc[0]

# 过滤出该用户未评分的电影
movies_unrated = data.loc[data['userId'] == user_id, 'movieId']

# 构造用户和电影的组合
user_movie_pairs = pd.DataFrame({'userId': [user_id] * len(movies_unrated), 'movieId': movies_unrated})

# 预测评分
ratings_pred = model.predict(user_movie_pairs)

# 推荐评分较高的电影
recommendations = pd.DataFrame({'movieId': movies_unrated, 'rating_pred': ratings_pred})
recommendations = recommendations.merge(movies, on='movieId')
recommendations.sort_values('rating_pred', ascending=False, inplace=True)

以上就是使用sklearn构建推荐系统的一个示例。注意,这只是一个简单的推荐系统示例,实际的推荐系统通常还会使用更复杂的算法,并结合用户的其他特征进行推荐。同时,还需要考虑数据的稀疏性、冷启动问题等实际挑战。