一文教你构建图书推荐系统【附代码】

2018 年 9 月 16 日 机器学习算法与Python学习

推荐系统在电子商务网站中广泛被使用,如何向用户推荐最适合其品味的产品是研究的重点。本文在Book Crossing数据集的基础上进行图书推荐系统的研究,详细讲解了构建推荐系统的步骤:加载数据集(图书、用户、评分表)、检查各个数据集等,并实现了基于流行度的简单推荐系统和基于协同过滤的推荐系统(基于用户和基于item)。通读本文,相信你一定能理解简单推荐系统的构建过程。


作者 | Chhavi Saluja

编译 | 专知

参与 | Yingying, Xiaowen


代码下载方式

关注公众号,后台回复

20180916


>传送门<


构建图书推荐系统之路



 

在线推荐系统是许多电子商务网站的技术核心。推荐系统向客户推荐最适合他们品味和特点的产品。


Book Crossing数据集由Cai-Nicolas Ziegler于2004年推出,内含三张表,即用户,书籍和评分表。显式评分以1到10的等级表示(较高的值表示较高的分值)并且隐含的分值由0表示。


在构建任何机器学习模型之前,理解数据是什么以及我们想要实现什么是至关重要的。数据探索揭示了隐藏的趋势和见解,并且数据预处理使数据可供机器学习算法使用。


首先,我们加载数据集并检查书籍、用户和评分数据集的格式如下:

书籍




从书籍数据集开始,我们可以看到图像URL栏目似乎不是分析所必需的,因此可以将它们删除。


我们现在检查每个列的数据类型,并更正缺失和不一致的条目。


  • 出版时间

现在我们检查这个属性的值。

出版时间中有一些不正确的条目。由于csv文件中存在一些错误,看起来像出版商名称的'DK Publishing Inc'和'Gallimard'在数据集中被错误地加载为出版日期。此外,其中一些值是字符串,并且在某些地方输入的年份与数字相同。 我们将对这些行进行必要的更正,并将出版日期的数据类型设置为int。

现在可以看到出版时间是int类型的,它的值在0-2050之间。由于这个数据集是在2004年建立的,我假设2006年以后的所有年份都是无效的,保持两年的差值,以防数据集可能已被更新。对于所有无效条目(包括0),我将它们转换为NaN,然后用剩余年份的平均值替换它们。


  • 出版商

在“发布者”专栏中,我已经处理了两个NaN值,将其替换为'other',因为在某些检查后无法推断出版商的名称。


用户数据集




现在我们探索用户数据集,首先检查它的大小,前几列和数据类型。


  • 年龄

在检查值时,userID看起来是正确的。然而,年龄栏有一个NaN和一些非常高的值。在我看来,5岁以下和90岁以上的年龄没有太大意义,因此,这些会被NaN取代。然后所有的NaN都被平均年龄取代,其数据类型被设置为int。

我在这里没有对位置列进行任何处理。但是,如果你你希望处理位置数据,可以进一步将其拆分为城市,州和国家,并使用文本处理模型进行一些处理。


评分数据集



 

我们检查评分数据集的大小和前几行。它显示我们的用户-书籍评分矩阵将非常稀疏,因为与评分矩阵的大小(用户数量×书籍数量)相比,实际评分相当低。

现在评分数据集应该具有各自表格中存在的用户ID和ISBN,即,用户和书籍。

很明显,用户对一些书籍进行了评分,这些书籍并不是原始书籍数据集的一部分。数据集的稀疏度可按如下方式计算:

1-10表示的显式评分和0表示的隐性评分现在必须分开。我们将仅使用明确的评分来建立我们的图书推荐系统。同样,用户也被分为明确评分和记录隐性行为的人。

一份书评图显示,较高的打分率在用户中更常见,评分为8的次数最多。


基于流行度的简单推荐系统




此时,可以基于不同书籍的用户评分计数来构建基于流行度的简单推荐系统。 很明显,j.k.罗琳写的书很受欢迎。


基于协同过滤的推荐系统




为了配合机器的计算能力并减少数据集大小, 我们选择至少对100本书籍进行打分的用户,以及至少有100个评分的书籍。

构建基于CF的推荐系统的下一个关键步骤是从评分表中生成用户-项目评分矩阵。

请注意,评分矩阵中的大部分值都是NaN,表示评分不存在,因此数据稀疏。另外请注意,这里只考虑显式评分。由于大多数机器学习算法不能处理NaN,我们用0代替它们,表明没有评分。


基于用户的CF



 

我将会用到一个之前的分享(https://towardsdatascience.com/collaborative-filtering-based-recommendation-systems-exemplified-ecbffe1c20b1)中提过的函数。函数findksimilarusers输入用户ID和评分矩阵,并返回k个相似用户的相似度和指数。

函数predict_userbased基于用户的方法对特定的user-item组合进行评分。

函数recommendItem使用上述函数为基于用户或基于项目的方法(基于选定的方法和度量标准组合)推荐书籍。如果图书的预测评分大于或等于6,并且图书尚未被打分,则给出推荐。你可以在调用此函数时选择相似性度量(余弦/相关)。

根据基于用户的CF方法检查用户4385的top-10的书籍推荐。


基于item的CF



 

为基于item的CF编写了类似的函数,可以找到k本类似的书籍,并预测每本书的用户评分。相同的函数recommendItem可用于基于item的方法和选定的度量标准推荐图书。如果图书的预测评分大于或等于6,并且图书尚未被评分,则进行推荐。

根据基于item的CF方法检查用户4385的top-10书籍推荐如下所示。这与基于用户的方法有很大的不同。

在这篇文章中,交叉验证、测试训练拆分和推荐系统评估等领域还没有涉及到,这些领域值得探索。


参考文献:

https://towardsdatascience.com/how-did-we-build-book-recommender-systems-in-an-hour-the-fundamentals-dfee054f978e


https://cambridgespark.com/content/tutorials/implementing-your-own-recommender-systems-in-Python/index.html


参考链接:

https://towardsdatascience.com/my-journey-to-building-book-recommendation-system-5ec959c41847


登录查看更多
10

相关内容

推荐系统,是指根据用户的习惯、偏好或兴趣,从不断到来的大规模信息中识别满足用户兴趣的信息的过程。推荐推荐任务中的信息往往称为物品(Item)。根据具体应用背景的不同,这些物品可以是新闻、电影、音乐、广告、商品等各种对象。推荐系统利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程。个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品。随着电子商务规模的不断扩大,商品个数和种类快速增长,顾客需要花费大量的时间才能找到自己想买的商品。这种浏览大量无关的信息和产品过程无疑会使淹没在信息过载问题中的消费者不断流失。为了解决这些问题,个性化推荐系统应运而生。个性化推荐系统是建立在海量数据挖掘基础上的一种高级商务智能平台,以帮助电子商务网站为其顾客购物提供完全个性化的决策支持和信息服务。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
专知会员服务
87+阅读 · 2020年1月20日
【书籍推荐】简洁的Python编程(Clean Python),附274页pdf
专知会员服务
179+阅读 · 2020年1月1日
10分钟入门推荐系统,这份有实战、有代码的资料火了!
七月在线实验室
5+阅读 · 2019年6月6日
一文教你如何处理不平衡数据集(附代码)
大数据文摘
11+阅读 · 2019年6月2日
我是怎么走上推荐系统这条(不归)路的……
全球人工智能
11+阅读 · 2019年4月9日
干货 | 用 Keras 实现图书推荐系统
AI科技评论
11+阅读 · 2018年12月15日
Arxiv
3+阅读 · 2018年10月18日
Arxiv
23+阅读 · 2018年8月3日
Arxiv
14+阅读 · 2018年4月18日
VIP会员
Top
微信扫码咨询专知VIP会员