乐趣区

推荐系统中的相似性

作者 |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….

欢迎关注磐创 AI 博客站:
http://panchuang.net/

sklearn 机器学习中文官方文档:
http://sklearn123.com/

欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/

退出移动版