如何用Python构建机器学习推荐系统?网易云、爱奇艺也用这种方法( 二 )

针对训练数据的不同部分所产生的不同数据帧如下组合:
df = df1.copy()df = df.append(df2)df = df.append(df3)df = df.append(df4)df.index = np.arange(0,len(df))df.head(10)

如何用Python构建机器学习推荐系统?网易云、爱奇艺也用这种方法

文章插图
 
接下来我们来把 movie-titles 文件可以作为 Pandas 数据帧加载到内存中:
df_title = pd.read_csv('./data/netflix/movie_titles.csv', encoding = "ISO-8859-1", header = None, names = ['Movie_Id', 'Year', 'Name'])df_title.head(10)
如何用Python构建机器学习推荐系统?网易云、爱奇艺也用这种方法

文章插图
 
2.3 训练评估模型
Surprise中的数据集模块提供了从文件、Pandas 数据帧或内置数据集(如ml-100k(MovieLens 100k)加载数据的各种不同方法,例如:
  • Dataset.load_builtin()
  • Dataset.load_from_file()
  • Dataset.load_from_df()
在本文中,我使用 load_from_df()方法从 Pandas 数据帧加载数据 。
Surprise中的 Reader 类用于解析包含用户、项目和用户对项目的评分文件 。默认格式是每个评分存储在订单用户项目评分的单独一行中 。此顺序和分隔符可使用以下参数进行配置:
  • line_format 是类似于“ item user rating”的字符串,用于指示字段名称用空格分隔的数据顺序;
  • sep 用于指定字段之间的分隔符,例如空格,“,”等;
  • rating_scale 用于指定评分等级 。默认值为(1,5);
  • skip_lines 用于指示文件开头要跳过的行数,默认值为 0 。
本文将使用默认设置,项、用户、等级分别对应于数据帧中的 Cust_Id,Movie_Id 和 Rating 列 。
Surprise 库包含了构建推荐系统的多个模型/算法的实现,如 SVD、概率矩阵分解(PMF)、非负矩阵分解(NMF)等,本文使用的是 SVD 模型 。
下面的代码是从 Pandas 数据帧中加载数据并创建一个 SVD 模型实例:
from surprise import Reader, Dataset, SVDfrom surprise.model_selection.validation import cross_validatereader = Reader()data = https://www.isolves.com/it/ai/2020-08-07/Dataset.load_from_df(df[['Cust_Id', 'Movie_Id', 'Rating']], reader)svd = SVD()产品推荐的数据和模型准备好后,可以使用交叉验证对模型进行评估,如下所示:
# 运行5倍交叉验证并打印结果cross_validate(svd, data, measures=['RMSE', 'MAE'], cv=5, verbose=True)以下是 SVD 模型交叉验证的结果:
如何用Python构建机器学习推荐系统?网易云、爱奇艺也用这种方法

文章插图
 
一旦模型被评估到我们满意的程度,我们就可以使用整个训练数据集重新训练模型:
trainset = data.build_full_trainset()svd.fit(trainset)2.4 推荐产品
当推荐模型经过适当的训练后,就可以用来进行预测 。
例如,给定一个用户(例如,客户Id 785314),我们可以使用经过训练的模型来预测用户对不同产品(即 Movie titles)的评级:
titles = df_title.copy()titles['Estimate_Score'] = titles['Movie_Id'].apply(lambda x: svd.predict(785314, x).est)为了向给定用户推荐产品(即电影),我们可以按预测收视率的降序对电影列表进行排序,并将前N部电影作为推荐:
titles = titles.sort_values(by=['Estimate_Score'], ascending=False)titles.head(10)以下是向客户 Id 为 785314 的用户推荐的前 10 部电影:
如何用Python构建机器学习推荐系统?网易云、爱奇艺也用这种方法

文章插图
 
3、总结在本文中,我使用了 scikit Surprise 库和 Kaggle Netflix prize 数据集来演示如何使用基于模型的协作过滤方法在 Python 中构建推荐系统 。
如本文开头所述,数据集太大,无法在笔记本电脑或任何传统的个人计算机上处理 。因此,出于演示目的,我仅从每个训练数据集文件中加载了前 100,000 条记录 。
在实际应用程序的设置中,我建议将 Spark 与 Koalas 一起使用,或者在 Spark MLLib 中使用Alteraternating Least Squares(ALS)算法来实现协作过滤系统并在 Spark 集群上运行 。
Github 源代码及项目地址:https://github.com/yzzhang/machine-learning/tree/master/recommender
--END--
本文作者张跃峰博士,原文链接:https://towardsdatascience.com/machine-learning-for-building-recommender-system-in-python-9e4922dd7e97
翻译:未艾信息(www.weainfo.net)
喜欢本文的同学记得转发+点赞~
更多内容,欢迎大家关注我们的公众号:为AI呐喊(weainahan)



推荐阅读