知行编程网知行编程网  2022-04-17 13:00 知行编程网 隐藏边栏 |   抢沙发  5 
文章评分 0 次,平均分 0.0

一步步构建推荐系统

转自 | 专知     作者 | Susan Li

【导读】推荐系统是数据科学中最常用和易于理解的应用之一。虽然在这个领域有很多工作,但互联网的快速发展和信息过载问题,这方面的兴趣和需求仍然很高。在线企业必须帮助用户处理信息过载并向他们提供个性化的推荐,内容和服务。
推荐系统的两种最流行的方法是协同过滤和基于内容的推荐。在这篇文章中,我们将重点关注协同过滤方法,即:用户是过去喜欢具有相似品味和偏好的人的推荐项目。换句话说,该方法通过使用用户之间的相似性来预测未知评分。
我们将使用由Nicolas Hug建立的Surprise库,Book-Crossing和一个用于开发推荐系统算法的书籍评分数据集。


数  据
Book-Crossing数据包括三个表,我们将使用其中两个:users表和book rating表。
<section style="margin-bottom: 10px;margin-left: 8px;margin-right: 8px;"><span style="font-size: 15px;">user = pd.read_csv('BX-Users.csv', sep=';', error_bad_lines=False, encoding="latin-1")</span><br  /><span style="font-size: 15px;">user.columns = ['userID', 'Location', 'Age']</span><br  /><span style="font-size: 15px;">rating = pd.read_csv('BX-Book-Ratings.csv', sep=';', error_bad_lines=False, encoding="latin-1")</span><br  /><span style="font-size: 15px;">rating.columns = ['userID', 'ISBN', 'bookRating']</span><br  /><span style="font-size: 15px;">df = pd.merge(user, rating, on='userID', how='inner')</span><br  /><span style="font-size: 15px;">df.drop(['Location', 'Age'], axis=1, inplace=True)</span><br  /><span style="font-size: 15px;">df.head()</span></section>
一步步构建推荐系统


简单的数据分析
评分分布 
一步步构建推荐系统


我们可以看到,数据中超过62%的评分为0,很少有评分为1或2或3,低评级书籍意味着它们通常非常糟糕。
根据书籍对评分分布进行计算
一步步构建推荐系统


一步步构建推荐系统
数据中的大多数书籍收到的评分不到5个,很少有书籍有很多评级,尽管评分最高的书籍收到了2,502个评分。
用户评分分布
一步步构建推荐系统


一步步构建推荐系统
数据中的大多数用户给出的评分低于5,而且用户评分很高,尽管效率最高的用户给出了13,602个评分。
注意到,上面两个图表共享相同的分布。 每部电影的评分数量和每位用户的评分数量呈指数级衰减。
为了减少数据集的维度,并避免遇到“内存错误”,我们将过滤掉很少评级的电影,很少评级用户。
一步步构建推荐系统


Surprise
要从上面的pandas数据框加载数据集,我们将使用load_from_df()方法,我们还需要一个Reader对象,并且必须指定rating_scale参数。 数据框必须有三列,对应于用户ID,项ID和此顺序中的评级。 因此,每行对应于给定的评级。
使用Surprise库中包含以下算法:
基本算法
  • NormalPredictor 算法根据训练集的分布预测随机评分。 这是最基本的算法之一,没有做太多工作。

  • BaselineOnly 算法预测给定用户和项目的基线估计。


k-NN算法
  • KNNBasic 基本协同过滤算法

  • KNNWithMeans 考虑平均评分的基本协同过滤算法

  • KNNWithZScore 考虑Z-score的基本协同过滤算法

  • KNNBaseline 考虑baseline打分的基本协同过滤算法

基于矩阵分解的算法:SVDSVDppNMF算法
其他:SlopeOneCoclustering
使用rmse作为评估标准
一步步构建推荐系统


训练和预测
BaselineOnly的rmse最高,因此,我们将使用BaselineOnly训练和预测并使用交替最小二乘法(ALS)作为损失。
一步步构建推荐系统
我们使用train_test_split()对具有给定大小的trainset和testset进行采样,并使用rmse的精度度量。 然后我们将使用fit()方法来训练上的算法,test()方法将返回从testset中做出的预测。


一步步构建推荐系统
我们构建一个包含所有预测的pandas数据。
最好的预测结果:
一步步构建推荐系统
最差的预测结果:
一步步构建推荐系统
一步步构建推荐系统


事实证明,该书大多数评分为0,换句话说,数据中的大多数用户将本书评为0,只有极少数用户评为10.与“最差预测”列表中的其他预测相同。 似乎对于每个预测,用户都是某种局外人。

原文链接:
https://towardsdatascience.com/building-and-testing-recommender-systems-with-surprise-step-by-step-d4ba702ef80b
完—
为您推荐

从6万用户评论中,选出23门全世界最好的CS免费课

作为 IT 行业的过来人,你有什么话想对后辈说的?

这位90后学霸,即将任教麻省理工
机器学习必知必会10大算法
【微软】AI-神经网络基本原理简明教程

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享