推荐系统中的类似性

做者|Madhukara Putty
编译|VK
来源|gitconnectedgit

你有没有想过Netflix是如何推荐你想看的电影的?或者亚马逊如何向你展现你以为须要购买的产品?机器学习

很明显,那些网站已经知道你喜欢看什么或买什么了。他们有一段在后台运行的代码,能够在线收集用户行为数据,并预测单个用户对特定内容或产品的好恶。这种系统被称为“推荐系统”。函数

通常来讲,开发推荐系统有两种方法。在一种方法中,系统考虑我的所消费内容的属性。例如,若是你在Netflix上一天内看过黑客帝国,那么Netflix知道你喜欢科幻电影,并且更有可能推荐其余科幻电影。换言之,推荐是基于电影类型-科幻在这种状况下。学习

在另外一种方法中,推荐系统会考虑与你口味类似的其余人的偏好,并推荐他们看过的电影。与第一种方法不一样的是,建议是基于多个用户的行为,而不是基于所消费内容的属性。这种方法称为协同过滤。网站

在这个例子中,咱们认为这两种方法都更有可能向你推荐科幻电影,但它们会采起不一样的方法得出结论。spa

效用矩阵

协同过滤的一个重要部分是识别具备类似偏好的观众。尽管Netflix采用多种方式收集用户偏好信息,但为了简单起见,咱们假设它要求观众对电影进行1-5级评分。咱们还假设只有7部电影(哈利波特三部曲HP1~三、暮光之城TW和星球大战三部曲SW1~3)须要审查,只有4位观众被要求对它们进行评分。.net

图1显示了咱们四个精心挑选的观众提供的评分。这样一个表,产品在列上,用户在行上,叫作效用矩阵。空白意味着有些用户尚未给某些电影打分。3d

事实上,Netflix天天都有上千个节目被数以百万计的观众消费。相应地,它的实际效用矩阵将有数百万行,跨越数千列。此外,随着系统不断获取用户行为信息,矩阵也会动态更新。blog

经过查看图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》给予了很高的评价。这种评分的类似性能够经过用规则将评分四舍五入来消除。例如,咱们能够将规则设置为将等级三、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/

相关文章
相关标签/搜索