上礼拜刚在Amazon买了TOTORO的汽车贴纸,这几天打开Amazon都是这些相关的推荐。
编辑
哈哈,不管你是在国内,还是国外,用淘宝还是Amazon,你应该都有这种体验吧;
编辑
不懂推荐系统背后原理的人,会觉得,
“哇!这原来就是传说中的人工智能推荐啊,好了解我哦”
懂得人:“哦,这个网址,背后用的是哪个算法啊。”
今天,不管你懂不懂,八分钟保证你看懂推荐系统背后的原理。
01 日常生活中的2种简单的推荐方法
- 第一种就是非定制的推荐系统;
- 第二种就是定制化的推荐系统。
什么叫做非定制化的推荐系统呢?
简单来说就是,什么最热卖,什么关注的人多,就推荐你什么。
编辑
这样就产生一个问题了。
一个有糖尿病的老爷爷去买水果,老板也向他推荐西瓜。如果你是这位老爷爷,你肯定要不高兴了吧。
编辑
原本好好的生意,就这样泡汤了。
老板,想了想,我是不是应该改变一下推荐方法啊。
编辑
上面的故事,就是平时我们日常生活中,会用到的推荐系统:
定制化的推荐系统,和非定制化的推荐系统。
02 定制化推荐系统的推荐方法
讲到定制化的推荐系统里面常用的方法,一般常用的有两大类。
第一种:协同过滤(collaborative filtering),什么是协同过滤呢,这个我们过会详细讲,因为这是目前蛮常用的推荐方法。
第二种:基于内容的推荐(content-based recommendation)。
基于内容的推荐大致是,我看了一篇关于足球的报道,之后又向我推荐了足球的相关报告。里面用的技术就是基于内容的推荐。
编辑
还有一些其他的推荐方法,比如co-occurrence,或者把几种方法的结果都综合组合一下的方法。
今天这篇文章,主要就是讲的是推荐系统里的明星算法,也就是前面说的第一种:协同过滤 (collaborative filtering)~~
03 协同过滤是什么
协同过滤这个算法,目的就是找相似。
其中:找相似,可以是找相似的人,也可以找相似的东西。
- 比如,我们找到相似的一群人,我们就能用其中一些人喜欢的东西,推荐给另一个人;
- 找相似的东西的,如果一个人喜欢一样东西,那么我再推荐她另一样东西,因为这两样东西很相似。
讲了这个两个例子,是不是觉得协同过滤最重要的就是找相似啊,哈哈,那我们就讲讲这个算法的核心部分,怎么找相似。
04 协同过滤相似怎么找
编辑
下面我们做个小练习,回顾一下初中知识,
- 第一张图两个从原点出发的点,他们之间的夹角是30度,cos𝜽是0.86;
- 第二张图夹角是90度,cos𝜽是0;
- 第三张图夹角是150度,cos𝜽是-0.86。
是不是发现,角度越小,cos𝜽就越接近1,角度越大,cos𝜽就越接近-1。
那找相似我们就能直接用cos𝜽的大小来描述啦。
上面这个问题,用初中知识就能算出cos𝜽。
但是现实生活的例子是很复杂的呀,比如突然从xy轴的两维, 变成xyz的三维,或者很多维的话,算cos𝜽怎么办?
05 相似度的计算公式
编辑
A点坐标是(0,2,3);
B点坐标是(5,2,0)
那这两个点的cos𝜽就是
分子: 0* 5+2* 2+3* 0 = 4
分母:sqrt(0^2 + 2^2 + 3^2) * sqrt(5^2 + 2^2 + 0^2) = 19
分子除以分母,得出来cos𝜽 = 0.21。
根据我们之前说的越相似,cos𝜽越接近于1来看。你说,A点和B点,算是接近还是不接近呢?
06 化妆品网站的推荐例子 (找相似的人user-based)
来讲一个电商网站的推荐例子。
小美一直喜欢在网上买化妆品,今天晚上,她又打开了常去的网站,逛逛。
编辑
小美呢,以前在这个网站上买过口红,眼影和香水,还给她们评价給过分。
除了小美的购买的记录,我们还知道,其他人的购买记录和评分,比如小丽,小红,小花。
我们是不是能够利用其他人的信息,来找到小美最可能买的东西,推荐给她呢?
这样问题变得很简单了,只要用我们之前说的,找小美和其他所有人之间的cos𝜽,然后挑几个最接近她的人,看她们买过什么,给的评价怎么样,然后推荐给小美,就行了。
编辑
第二步,没有评分的化妆品,我们假设这些人都打0分。
这样4个小女孩,就变成了之前公式里的4个点。
小美(4,0,0,5,1,0,0)
小丽(5,5,4,0,0,0,0)
小红(0,0,0,2,4,5,0)
小花(0,3,0,0,0,0,3)
编辑
根据前面的公式,我们算出来
- 相似度(小美,小丽) = 0.38
- 相似度(小美,小红) = 0.32
- 相似度(小美,小花) = 0
这样看下来,小美和小丽是相对比较相似的,然后是小红。
编辑
这个例子里面,我们挑2个人,小丽和小红,来综合算出推荐给小美的东西。
由于7样产品里面,小美买过3样,有4样还没有买过和评价过,所以,我们只要知道,另外4样小美可能会评价的分数,那么我们就可以挑最高的推荐给她。
利用小丽,和小红的评价分数和她们与小美相似度,我们就能推算出小美的评价分数.
这里,我们用到的是平均加权方法。
编辑
- 小美会给粉饼的打分是 = (5 *0.38 + 0 * 0.32)/(0.38+0) = 5
- 小美会给粉饼的打分是 = (4 * 0.38 + 0 * 0.32)/(0.38+0) = 4.8
- 小美会给乳液的打分是 = (0 * 0.38+5 * 0.32)/(0+0.32) = 5
这样粉饼和润肤露都是5,但由于小丽和小红的相似度最高,她给粉饼是5分,所以我们推荐粉饼给小红。
等等!让我们倒退到第二步开头,
“
第二步,没有评分的化妆品,我们假设这些人都打0分。
编辑
打0分合理吗?
谁说,她们一定都会给那些没有买过、评价过的化妆品,打0分呀。
如果一个人以前给2个产品分别打过4分,2分。
然后,我们取一个平均值:3分。把这个3分,作为没买过东西的可能打分,是不是更合理呢?
对的,完全正确。
这个方法在统计里面我们叫做标准化。标准化,不仅解决之前说的不合理性,还能解决每个人的评价标准差异。
比如,有人自认为5分就是她的最高分,而有些人比较严格觉得3分就是她认为的最高分。但是,其实3分,5分,都是这些人心目中的最高分。
标准化,就解决了这个问题。
我们回到之前的表格,在没有评分的地方,我们算出平均值填进去。比如小美的平均值就是(4+5+1)/3 = 10/3; 小丽是(5+5+4)/3 =14/3。。。
编辑
为了达到标准化每个人的评价要求差异,我们将每个人的平均值就变成以0为中心,打分低于平均分的是负的数,高于平均分为正数。
编辑
编辑
07 化妆品网站的推荐例子 (找相似的物item-based)
记得我之前说,
"
找相似,可以是找相似的人,也可以找相似的东西。
比如,我们找到相似的一群人,我们就能用其中一些人喜欢的东西,推荐给另一个人;
找相似的东西的,如果一个人喜欢一样东西,那么我再推荐她另一样东西,因为这两样东西很相似呀。
编辑
上面那个例子就是找相似的人,现在我们说下找相似的东西。
有一天,小美又上网闲逛了,她买过也评分过润肤露,眼影,香水,睫毛膏,这次只剩下口红和粉饼没有买,那下一个该推荐给她口红呢,还是粉饼呢?
编辑
根据之前的顺序,我们算出化妆品之间的相似性,步骤也是先填平均值->标准化->算cos相似度值->挑出几个和目标物体相似的物体-> 结合物品打分和物品相似值,综合打分->挑出分数高的推荐给小美。
这样,我们算出,
- 和口红最接近的是润肤露和睫毛膏;
- 和粉饼最接近的是眼影和香水。
根据小美打过其他产品的分数,以及这些产品和口红、粉饼相似度,我们算出:
- 小美给口红打分: (0.41 * 2 + 0.59 * 3)/(0.41+0.59) = 2.6
- 小美给粉饼打分: (0.47 * 5 + 0.40 * 4)/(0.47+0.40) = 4.5
编辑
粉饼大于口红,我们推荐粉饼给小美。
编辑
08 人人相似和物物相似的推荐哪个更好
现实生活中,其实两个都有在用。但是物物相似更常用一点。因为每个人都有自己的喜好,用的不当心,容易产生反感。
比如一个男孩子买了啤酒,薯片。一个女孩子买了口红,啤酒,薯片。根据计算,男孩和女孩很相似,然后推荐口红给男孩。看起来,是不是很奇怪呀?但是如果你规则定的好,人人相似,也会有很好的效果。
推荐系统里的协同过滤就是这么简单,最后你们能猜出亚马逊给我推荐东西的背后,用的是人人相似,还是物物相似吗?