英文名 | Building Recommender Systems with Machine Learning and AI |
课程来源 | Lynda.com |
讲师 | Frank Kane |
课程ID | 5028662 |
课程时长 | 9.1小时 |
下载所需积分 | 50 |
解压密码 | 课程压缩文件如果需要解压密码,则密码一律为 www.zwsub.com |
所属类别 | Python 全部 网络管理 |
自动推荐无处不在:Netflix,亚马逊,YouTube等
推荐系统了解您的独特兴趣,并展示他们认为您最喜欢的产品或内容
了解如何从该领域的先驱之一构建自己的推荐系统
Frank Kane在亚马逊度过了九年多,在那里他领导了公司许多个性化产品推荐技术的开发
在本课程中,他介绍了基于邻域协同过滤和更现代技术的推荐算法,包括矩阵分解甚至是人工神经网络的深度学习
在此过程中,您可以学习Frank丰富的行业经验,并了解使用真实数据大规模应用这些算法的现实挑战
您还可以亲自动手,开发自己的框架来测试算法,并使用Amazon DSSTNE,AWS SageMaker和TensorFlow等技术构建您自己的神经网络
主题包括:
Top-N推荐器架构
推荐者的类型
用于使用推荐器的Python基础知识
评估推荐系统
衡量你的推荐人
查看推荐引擎框架
基于内容的过滤
基于邻域的协同过滤
矩阵分解方法
深度学习基础知识
将深度学习应用于建议
使用Apache Spark,Amazon DSSTNE和AWS SageMaker进行扩展
使用推荐系统的现实挑战和解决方案
来自YouTube和Netflix的案例研究
构建混合,合奏推荐器
- [讲述人]所以是时候开始写一些代码了。
我们已经讨论了许多评估推荐系统的不同方法,所以让我们从编写代码开始,使这些指标成为现实。
将其视为测试驱动的开发。
在编写任何实际的推荐系统之前,我们将编写测试,这通常是一个好主意,因此您可以专注于您想要实现的结果。
我们将使用名为Surprise的开源Python库来简化生活。
你应该已经在第一堂课中安装了它。
我们来看看它是如何工作的。
让我们从在线查看supriselib的文档开始。
惊喜是围绕测量推荐系统的准确性而建立的,尽管我已经反复说过这是一个错误的事情,但如果没有访问我们自己的真实大型网站,我们真的是最好的。
它可以为我们提供一些有关我们将要使用的算法属性的信息。
它还为我们节省了大量的工作。
例如,它可以为我们计算MAE和RMSE之类的东西。
让我们来看看surpriseelib为我们提供的准确度指标的文档。
让我们继续在RecSys环境中启动Spyder。
现在在我们课程资料的评估文件夹下打开RecommenderMetrics.py,让我们看看它的作用。
推荐度量标准是一个Python包,它只包含我们可以在其他地方的代码中使用的函数。
因此,我们正在构建的是用于评估推荐系统的有用功能库。
从surpriseelib网站,我们可以深入了解github,了解它们对MEA和RMSE指标的实际实施情况。
当别人已经完成并为我们测试它时,自己编码是没有意义的。
让我们回到我们的推荐人指标包。
首先,我想再次强调,本课程并不是要教你如何用Python编写代码。
因此,我们不会逐步介绍每一行代码并讨论它的作用,我不会让你看着我输入数千行代码并让你跟进。
这些是学习如何编码的好方法,但我的假设是你已经熟悉了Python,所以我们可以专注于算法和架构。
如果它对你没有任何意义,那么你真的应该首先参加Python的入门课程。
也就是说,让我们深入了解这个包中发生的事情。
由于Surprise主要关注的是评估预测,我们必须编写一些代码来获取前N个建议。
这就是GetTopN函数的作用。
它会从一些推荐器中获取完整的评级预测列表,并返回将用户ID映射到其前N个评级的字典。
我们还可以通过最低评级阈值,以防止我们推荐我们认为用户不会真正喜欢的项目。
我们返回的字典实际上是一个defaultdict对象,就像普通的Python字典一样,但是当你尝试访问尚未使用的密钥时,它具有默认空值的概念。
为了计算命中率,我们需要传入我们的每个用户ID的前N个电影字典和训练数据集中剩余的测试电影评级集。
如果你还记得,我们正在使用一种称为留一交叉验证的技术,以阻止每个用户评级一次,并测试我们在我们的前N个列表中推荐留下电影的能力。
累积命中率或CHR的工作方式完全相同,除非现在我们有一个评级截止值,所以除非他们的预测评级高于我们选择的某个阈值,否则我们不会计算命中数。
您可以在第57行看到我们测试截止点的位置。
但除此之外,这与命中率功能相同。
我们也会实施评级命中率或RHR,因为我们也谈到了这一点。
这就像命中率一样,但我们会跟踪每个唯一评级值的命中率。
因此,我们使用另一个字典来跟踪每个评级类型的命中和总数,而不是一个变量来跟踪命中和用户总数。
然后在最后,我们将它们全部打印出来。
命中率的另一个转折是平均倒数命中等级,这又与命中率相似。
不同之处在于它通过每次命中等级的倒数来计算事物,以便为在前N个列表顶部附近发生的命中提供更多信用。
接下来我们可以测量覆盖率,这里我们将覆盖率定义为至少有一个良好推荐高于某个阈值的用户百分比。
在现实世界中,您可能会有一个项目目录,这些项目的目录大于您拥有建议数据的项目集,而是根据较大的集合来计算覆盖率。
但是对于我们必须在MovieLens中使用的数据,这是我能想到的最有趣的覆盖度量。
代码本身很简单。
接下来,我们将解决多样性问题。
为了衡量多样性,我们不仅需要系统中的所有前N个推荐,我们需要在数据集中的每对项目之间建立相似性得分矩阵。
尽管多样性很容易解释,但编码却有点棘手。
我们首先检索相似度矩阵。
这基本上是一个二乘二的数组,包含我们可以快速查找的每个可能项目组合的相似性分数。
然后,我们一次为每个用户查看前N个推荐。
这个itertools.combinations调用为我们提供了Top-N列表中每个项目对的组合。
然后我们可以遍历每一对并查找每对项目之间的相似性。
这是一个很好的时间,任何提及Surprise维护用户和顺序项目的内部ID,这些与我们的实际评级数据中的原始用户ID和电影ID不同。
相似性矩阵使用那些内部ID,因此我们需要在查找这些相似性分数之前将原始ID转换为内部ID。
我们将所有这些相似性得分相加,取平均值并从中减去它以得到我们的多样性指标。
正如您可以映像一样,在我们的数据集中为每个用户推荐每个可能的推荐项目组合运行此代码是非常密集的计算。
在现实世界中,在较大的数据集上,在计算数据时对数据进行采样可能是有意义的。
最后,我们将解决新颖性,这更容易。
我们将收集每个项目的受欢迎度排名的便利字典作为参数,然后只需要遍历每个用户的前N个推荐并计算推荐的每个项目的所有受欢迎度排名的平均值。
好的,现在我们有了评估推荐系统所需的工具。
接下来,让我们尝试一下真正的推荐人。