作者|Madhukara Putty
编译|VK
来源|gitconnected
你有没有想过Netflix是如何推荐你想看的电影的?或者亚马逊如何向你展示你觉得需要购买的产品?
很明显,那些网站已经知道你喜欢看什么或买什么了。他们有一段在后台运行的代码,可以在线收集用户行为数据,并预测单个用户对特定内容或产品的好恶。这种系统被称为“推荐系统”。
一般来说,开发推荐系统有两种方法。在一种方法中,系统考虑个人所消费内容的属性。例如,如果你在Netflix上一天内看过黑客帝国,那么Netflix知道你喜欢科幻电影,而且更有可能推荐其他科幻电影。换言之,推荐是基于电影类型-科幻在这种情况下。
在另一种方法中,推荐系统会考虑与你口味相似的其他人的偏好,并推荐他们看过的电影。与第一种方法不同的是,建议是基于多个用户的行为,而不是基于所消费内容的属性。这种方法称为协同过滤。
在这个例子中,我们认为这两种方法都更有可能向你推荐科幻电影,但它们会采取不同的方法得出结论。
效用矩阵
协同过滤的一个重要部分是识别具有相似偏好的观众。尽管Netflix采用多种方式收集用户偏好信息,但为了简单起见,我们假设它要求观众对电影进行1-5级评分。我们还假设只有7部电影(哈利波特三部曲HP1~3、暮光之城TW和星球大战三部曲SW1~3)需要审查,只有4位观众被要求对它们进行评分。
图1显示了我们四个精心挑选的观众提供的评分。这样一个表,产品在列上,用户在行上,叫做效用矩阵。空白意味着有些用户还没有给某些电影打分。
事实上,Netflix每天都有上千个节目被数以百万计的观众消费。相应地,它的实际效用矩阵将有数百万行,跨越数千列。此外,随着系统不断获取用户行为信息,矩阵也会动态更新。
通过查看图1中的效用矩阵,我们可以得出一些明显的结论。
-
观众A喜欢《哈利波特1》和《暮光之城》,但不喜欢《星球大战1》
-
观众B喜欢哈利波特三部曲的所有电影
-
观众C喜欢《星球大战1》和《星球大战2》,但不喜欢《暮光之城》
-
观众D不介意在无聊的一天里看《哈利波特2》和《星球大战2》,但这两部电影都不是她的选择
总而言之,观众A和观众B有着相似的品味,因为他们都喜欢《哈利波特1》。相比之下,观众A和C有不同的口味,因为观众A喜欢《暮光之城》,但观众C一点也不喜欢。同样,A不喜欢星球大战,但C喜欢。推荐系统需要一种方法来比较不同观众的评论,并告诉我们他们的品味有多接近。
量化相似性
有不同的标准来比较两个观众提供的评分,并找出他们是否有相似的品味。在本文中,我们将学习其中的两个:Jaccard距离和余弦距离。口味相似的观众更接近。
Jaccard距离
Jaccard距离是另一个称为Jaccard相似性的量的函数。根据定义,集合S和T的Jaccard相似性是S和T的交的大小与其并的大小之比。从数学上讲,它可以写成:
集A和集B之间的Jaccard距离d(x,y)由下式给出,
余弦距离
两个向量A和B之间的余弦距离是角度d(A,B),由,
其中
分别是向量A和向量B的(L_2)范数,n是要审查的产品(本例中是电影)的数量。余弦距离在0到180度之间变化。
效用矩阵距离测度的计算
为了更好地理解这些距离度量,让我们使用效用矩阵中的数据计算距离(图1)。
计算Jaccard距离:计算Jaccard距离的第一步是以集合的形式写入用户给出的评分。对应于用户A和B的集合是:
A={HP1,TW,SW1}
B={HP1,HP2,HP3}
集合A和集合B的交集是两个集合共有的元素集合。A和B的并集是A和B中所有元素的集合。因此
A⋂B={HP1}
A⋃B={HP1,HP2,HP3,TW,SW1}。
A和B之间的Jaccard距离为:
类似地,A和C之间的Jaccard距离,d(A,C)=0.5。根据这一衡量标准,观察者A和C与观察者A和B相比具有更多的相似性,这与对效用表的直观分析所揭示的完全相反。因此,Jaccard距离不适合我们考虑的数据类型。
计算余弦距离:现在让我们计算观众A和B之间以及观众A和C之间的余弦距离。为此,我们首先必须创建一个表示其评分的向量。为了简单起见,我们假设空格等于0的等级。这是一个值得商榷的选择,因为零分也可能代表观众给出的差分。对应于观众A、B和C的向量是:
A=[4,0,0,5,1,0,0]
B=[5,5,4,0,0,0,0]
C=[0,0,0,2,4,5,0]。
A和B之间的余弦距离为:
同样,A和C之间的余弦距离为:
这是合理的,因为它表明A比C更接近B。
转换评分
我们还可以通过对矩阵中的每个元素应用定义良好的规则来转换效用矩阵中捕获的数据。在本文中,我们将学习两种转换:四舍五入和标准化。
四舍五入
观众通常会给相似的电影提供相似的评分。例如,观众B对所有的哈利波特电影给予了很高的评价,而观众C对《星球大战1》和《星球大战2》给予了很高的评价。这种评分的相似性可以通过用规则将评分四舍五入来消除。例如,我们可以将规则设置为将等级3、4和5舍入为1,并将等级1和2视为空格。应用此规则后,我们的效用矩阵变成:
在评分四舍五入的情况下,对应于观众A和C的集合的交集为空集合。这将Jaccard相似度降低到其最小值0,并将Jaccard距离射向其最大值1。此外,对应于观众A和B的集合之间的Jaccard距离小于1,这使得A比C更接近B。请注意,Jaccard距离度量在使用原始用户评分计算距离时并没有提供对用户行为的这种了解。用四舍五入值求余弦距离得到了同样的结论。
标准化评分
另一种改变原始评分的方法是使其标准化。通过标准化,我们的意思是从每个评分中减去每个观众的平均评分。例如,让我们为平均评分为10/3的观众A找到标准化的评分。因此,她的标准化评分是,
下面给出了所有值都标准化的效用矩阵。请注意,这会将较高的值转换为正值,而将较低的值转换为负值。
由于效用矩阵中的个别值发生了变化,我们可以期望余弦距离发生变化。但是,Jaccard距离保持不变,因为它只取决于两个用户对电影的评分,而不取决于给定的评分。
对于标准化值,对应于观众A、B和C的向量为:
A和B以及A和C之间的余弦距离为:
虽然标准化评分的余弦距离计算并没有改变最初的结论(即A比C更接近B),但它确实放大了向量之间的距离。向量A和向量C似乎与标准化评分的差距特别大,尽管两者都不是非常接近。
结论
推荐系统是互联网经济的核心。它们是让我们沉迷于社交媒体、在线购物和娱乐平台的计算机程序。推荐系统的工作是预测特定用户可能购买或消费的内容。预测这一情况的两种广泛方法之一是,看看其他人——特别是那些对用户有类似偏好的人——购买或消费了什么。这种方法的一个关键部分是量化用户之间的相似性。
计算Jaccard和余弦距离是量化用户之间相似性的两种方法。Jaccard距离考虑了被比较的两个用户评分的产品数量,而不是评分本身的实际值。另一方面,余弦距离考虑的是评分的实际值,而不是两个用户评分的产品数量。由于计算距离的差异,Jaccard和余弦距离度量有时会导致相互冲突的预测。在某些情况下,我们可以通过根据明确的规则舍入评分来避免此类冲突。
评分也可以通过从用户给出的每个评分中减去用户给出的平均评分来进行转换。这一过程称为常态化,不影响Jaccard距离,但有放大余弦距离的趋势。
原文链接:https://levelup.gitconnected.com/measuring-similarity-in-recommendation-systems-8f2aa8ad1f44
欢迎关注磐创AI博客站:
http://panchuang.net/
sklearn机器学习中文官方文档:
http://sklearn123.com/
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/