用Python建立你的第一个推荐引擎
原文标题:Quick Guide to Build a Recommendation Engine in Python
作者: AARSHAY JAIN
翻译:张逸
在数据科学中,不管你是新手还是经验丰富的专业人士,自己做一些项目总是会给你的简历添彩。而我写这篇文章的目的就是让你从推荐系统开始,构建一个自己的项目。(如果你很难获得开放的数据,请在评论中告诉我)
“推荐引擎(Recommendation engines)”实际上就是一个自动化的商店柜员——你问他某个商品,他不仅会给你该商品,而且还会向你推荐可以购买的其他相关产品。可以说,他们在附加销售方面训练有素。而且在实际中,我们可以知道,这种推荐引擎能够很好的根据客户的历史行为推荐个性化内容,这让顾客们很高兴,同时也为网站招徕了更多的回头客。那么接下来,就让我们来实现一个自己的推荐引擎。
在这篇文章中,我会介绍在Python中使用GraphLab创建推荐系统的基础知识。这之后,你会对推荐系统如何工作、如何构建基本的流行度模型和协同过滤模型有一些自己的理解。
这篇文章的结构如下:
推荐引擎的种类
MovieLens数据集
简单的流行度模型
协同过滤模型
对推荐引擎的评估
在正式开始这篇文章之前,我要衷心感谢
1. 推荐引擎的种类
在查看不同类型的推荐引擎之前,让我们回顾一下,看看是否可以给出一些直观的建议。考虑以下情况:
case1:推荐最受欢迎的物品
一个简单的方法是推荐大多数用户都喜欢的东西。这是一个快速但是不那么好的方法,是因为这个它并没有涉及到个性化。
基本上,对于每个用户来说,被推荐的东西都是相同的——因为流行度定义在了整个用户群体上——所以每个人都会看到相同的结果。这听起来就好像是“一个网站建议你买微波炉,只是因为其他大多数用户喜欢它,但不在乎你是否有兴趣购买”。
令人惊讶的是,这种方法仍然被应用在类似门户网站的地方。每次你登录网站并查看bbcnews,你将看到一列“热门新闻”,它被细分为几个部分,每部分展示了阅读数最多的文章。在这种情况下,这个方法是有效的,因为:
存在一些不同的分类,所以用户可以看他的感兴趣的部分。
在某个时间段内,只有少数几个热点话题,所以很大概率上某个用户想要看的内容和大多数其他人的相重合
case2:用分类器来做推荐
我们已经知道有很多的分类算法。下面来看看如何运用这些技术来做推荐。首先,分类器是一种参数化解决方案,因此我们只需要定义用户和项目的一些参数(特征),而对于输出结果,如果用户喜欢,输出可以为1,否则为0。在某些场景中,分类器可以起到很好的作用,因为它有如下的几个优点:
体现出了个性化
即使用户的历史行为记录很短或不可用,它也可以工作
但它还有一些主要的缺陷,使得它在实际应用中并没有太多的推广:
在实际中一些特征可能是不可用的,或者即便是可用,也不能通过这些特征构建出一个好的分类器
随着用户数和项目数的增长,构建一个好的分类器会变得很困难
case3:推荐算法
接下来我将会介绍为解决推荐问题而量身定制的特殊算法——通常有两种类型——基于内容的推荐算法和协同过滤推荐算法。你可以参考我们以前的文章来了解其具体工作原理。篇幅所限,我在这里简短回顾一下:
1. 基于内容的推荐算法
算法思想: 如果用户喜欢某个东西,那么他也会喜欢与之相似的物品
基于推荐