要构建一个实用的“智能”推荐系统,不仅需要有好的算法,还需要了解接收推荐的用户。本书分为两部分,第一部分侧重于基础架构,主要介绍推荐系统的工作原理,展示如何创建推荐系统,以及给应用程序增加推荐系统时,应该如何收集和应用数据 ;第二部分侧重于算法,介绍推荐系统算法,以及如何使用系统收集的数据来计算向用户推荐什么内容。作者还教授了如何使用最流行的推荐算法,并剖析它们在 Amazon 和 Netflix 等网站上的实际应用。
正确理解、收集和应用用户数据
介绍流行的推荐算法及其在Amazon和Netflix等网站的应用
用一个完整电影推荐网站案例贯穿全书,并提供Python代码
序
当我 2003 年大学毕业时,面临着这样一个威胁 :在欧洲可能不需要计算机科学家,因为所有的开发工作都会在薪资很低的国家中进行。谢天谢地,由于各种原因这并未成为现实。我敢打赌,还有一个更大的问题是,不少公司都低估了开发人员不理解其开发的软件将会在何种文化背景下运行。软件需求虽然被实现了,但功能与客户所期望的并不相同。
如今,对机器学习和数据科学感兴趣的人也面临着类似的威胁。但现在的威胁不是低薪资,而是软件即服务(Saa),你上传数据,然后系统为你工作(不再需要人处理)。我和其他人一样担心机器不理解领域和人。机器还没有智能到可以把人完全忽略掉。世界虽然发展很快,但我敢说,任何在读本书的人都可以和推荐系统一起工作到他们退休。
我是如何“进坑”的呢?一开始我在意大利做软件工程师,后来搬到英国,我想找一份比在数据库上做 CRUD 操作更需要思考的工作。幸运的是,有一位来自RedRock 咨询公司的优秀招聘人员与我取得联系。他们给我推荐了一家做推荐系统的公司,然后我就去了那里工作。就是这样,我开始沉迷于机器学习。除了从事推荐系统的开发工作,我还开始在网络上寻找相关知识,阅读了大量关于这个学科以及相关主题的图书。
今天,你随便打一根棍子就能砸中至少 10 个试图教你一些关于机器学习知识的人。每当我看到声称仅需一张纸或一个小时就可以教会你关于机器学习的所有知识的广告时,就觉得很有趣。我也可以如法炮制一份关于如何成为战斗机飞行员的高效教程 :
起飞后用操纵杆进行飞行。如果需要射击,就按按钮。然后,要在汽油用完前着陆。
像这样的战斗机飞行员教程可能会很容易帮你入门—这也是我入门的方式。但不要自欺欺人 :理解机器学习是很复杂的事情。再加上人的因素,总是会让事情变得更不稳定。
回到我的故事,我做推荐系统的开发工作,并对此感到非常开心。后来我换了工作。在新职位上,我本应继续研究推荐系统,但那个项目被推迟了。当时我很紧张,担心不能再做与推荐系统相关的工作,但就在那时,Manning 出版社给了我一个机会,邀请我写一本关于推荐系统的书。除了接下这个任务,我还能做什么?我刚签完写作本书的合同,那个之前被推迟的推荐系统的项目就又开始了。写这本书是一次很好的学习经历,我希望你能从中受益并喜欢它。
写作本书的目的是向你介绍推荐系统—不仅包括算法,还包括推荐系统的生态系统。算法并不太复杂,但如果要理解并运行它们,你需要了解接收推荐的用户。
在写作过程中,这本书中的内容不断变化,因为我一直在努力加入更多的内容。我希望阅读这本书可以为你学习推荐系统提供所有必需的知识,并随着学习的深入,为你打下一个坚实的基础。
关于本书
看到亚马逊向用户推荐它的商品,或 Netflix 为用户做精准推荐时,你羡慕吗?接下来你有机会学习如何将这些技能添加到你的项目中。阅读本书将会使你了解什么是推荐系统,以及如何在实践中应用它们。要让推荐系统发挥作用,许多事情需要协调一致。你需要了解如何从用户那里收集数据以及如何解释这些数据,你还需要一个包含不同推荐算法的工具箱,这样才可以为特定场景选择最好的算法。最重要的是,你需要了解如何评估推荐系统。所有这些以及其他更多的内容都藏在这本书中。
本书读者对象
本书主要是写给那些对实现推荐系统感兴趣的开发人员的,采取一种实用的方法,同时尝试用通俗易懂的语言来解释一切。书中会涉及数学和统计学知识,但都会提供示例图和代码。如果将本书作为推荐算法以及启动并运行这些算法所需基础设施的介绍,那么数据科学的新手也可以从中受益。而管理者会发现这本书有助于了解推荐系统是什么以及如何在实践中使用它。
为了能从书中充分获取价值,你应该能够阅读 Python 或 Java 代码,还应该理解 SQL,并且对高等数学和统计学有基本的了解。
本书是如何组织的
本书分为两部分,一部分侧重于推荐系统的基础架构,另一部分侧重于算法。
在第 1 部分中,你将学习向应用程序中增加推荐系统时,应该如何收集以及应
用数据 :
第 1 章介绍了推荐系统的概况,并简要介绍了相关的关键要素。这一章对推荐系统是什么以及如何工作提供了基本认知。
第 2 章介绍了如何理解用户及其行为,并介绍了从用户那里收集数据的方法。
第 3 章介绍了 Web 分析,并展示了如何实现仪表盘,以便跟踪推荐系统。
第 4 章讨论了如何将行为数据转换为评分。
第 5 章主要讨论了非个性化推荐。
第 6 章主要讨论了新用户和新商品的相关问题,并给出了简单的解决方案。
在第 2 部分中,我们介绍了推荐系统算法,以及如何使用系统收集的数据来计算向用户推荐什么内容 :
第 7 章讨论了计算用户或诸如电影等内容之间相似度的公式。
第 8 章介绍了如何使用协同过滤做个性化推荐。
第 9 章介绍了离线评估推荐系统的指标,并介绍了在线评估推荐系统的方法。
第 10 章介绍了基于内容的过滤,它使用不同类型的算法,如 LDA 和 TFIDF,来发现内容的相似性。
第 11 章将回到第 8 章中介绍的协同过滤,但会使用降维的方法开展讨论。
第 12 章介绍了一种混合不同推荐系统的方法。
第 13 章介绍了排序算法以及排序学习推荐的方法。
第 14 章主要包含对未来的展望、下一步要学习的主题、有助于进一步加深理解的图书,以及对算法和背景的思考。
本书的设计思路是从头到尾顺序阅读,因为很多内容都涉及前面章节中介绍的知识,但也可以只阅读选定的章节。
下载
运行名为 MovieGEEKs 的样例网站所需的代码可以从 Manning 出版社的网站 1进行下载(下载地址参见链接 1),也可以在 github.com 上找到(网址参见链接 2)。
该网站使用 Django 平台实现。我们将用到两个数据集 :一个是自动生成的,另一个是从 MovieTweetings 上下载的。所有安装说明都可以在 GitHub 站点上找到。
代码约定
本书中包含大量源代码的例子,包括在有编号的清单以及普通文本中。在这两种情况下,源代码都使用等宽字体,以将其与普通文本进行区分。有时代码也会用粗体来突出显示,表示对本章前面的代码所做的变更,例如,将一个新功能添加到现有的代码行中。
在大部分情况下,原始的源代码都重新排过版 ;我们添加了换行符并重新安排了缩进,以便与纸质书的页面宽度匹配。在极少数情况下,即便这样做代码在一行中仍然放不下,于是便在行末使用了续行符标记( )。此外,在文本中描述代码时,通常会删除源代码中的注释。而书中许多代码清单中都伴有注释,以突出重要概念