当前位置: 首页 > news >正文

推荐系统中的相似度

文章目录

  • 前言
  • 余弦相似度:衡量向量方向的 “指南针”
  • 皮尔逊相关系数:修正均值的 “调节器”
  • 欧氏距离:衡量空间距离的 “尺子”
  • Jaccard 相似度:衡量集合重叠的 “度量仪”
  • 总结

前言

在信息爆炸的时代,推荐系统早已成为我们日常生活中不可或缺的一部分。无论是刷短视频时平台精准推送的感兴趣内容,还是网购时看到的 “猜你喜欢” 商品,背后都离不开推荐系统的功劳。而在推荐系统的核心技术中,相似度计算扮演着至关重要的角色,它就像一座隐形的桥梁,连接着用户与用户、用户与物品、物品与物品,帮助系统精准捕捉需求,实现个性化推荐。

来说,相似度是衡量两个对象(可以是用户、物品或特征)之间相似程度的指标。在推荐系统中,我们通过计算相似度来判断 “用户 A 是否和用户 B 有相似的喜好”、“物品 C 是否和物品 D 具有相似的属性”。基于这些判断,系统才能做出合理的推荐:比如给用户 A 推荐用户 B 喜欢的物品,或者给浏览过物品 C 的用户推荐物品 D。

不同的场景和数据类型需要搭配不同的相似度计算方法,选择合适的方法能让推荐效果事半功倍。接下来,我们就一起看看推荐系统中最常用的几种相似度计算方式。

余弦相似度:衡量向量方向的 “指南针”

余弦相似度是推荐系统中应用最广泛的相似度计算方法之一,它主要用于衡量两个向量在方向上的相似性。在推荐场景中,我们可以将用户或物品表示为向量,例如用户对物品的评分向量、物品的特征属性向量等。

对于两个向量aaabbb,它们的余弦相似度cos⁡θ\cos\thetacosθ等于两个向量的点积除以两个向量模长的乘积,即:

cos⁡θ=a⋅b∥a∥∥b∥=∑i=1naibi∑i=1nai2∑i=1nbi2\cos\theta=\frac{a\cdot b}{\|a\|\|b\|}=\frac{\sum_{i = 1}^{n}a_ib_i}{\sqrt{\sum_{i = 1}^{n}a_i^2}\sqrt{\sum_{i = 1}^{n}b_i^2}}cosθ=a∥∥bab=i=1nai2i=1nbi2i=1naibi

其中,aia_iaibib_ibi分别是向量aaabbb的第iii个分量,nnn是向量的维度。

余弦相似度的取值范围在[−1,1][-1,1][1,1]之间,值越接近 1,说明两个向量的方向越相似;值越接近 - 1,则说明方向越相反。

适用场景:当我们更关注两个对象的 “趋势” 而非 “绝对值” 时,余弦相似度是很好的选择。例如,在用户评分数据中,有些用户习惯给高分(比如都在 4-5 分之间),有些用户习惯给低分(比如都在 1-2 分之间),但他们对物品的相对喜好可能是相似的,这时余弦相似度就能有效捕捉这种相似性。

皮尔逊相关系数:修正均值的 “调节器”

注:对这个概念比较陌生,一下难以消化的朋友可以看一下文末参考【1】

皮尔逊相关系数广泛用于度量两个变量之间的相关程度,其值介于-1与1之间。下图展示了几组(x,y)(x,y)(x,y)的点集,以及各个点集中xxxyyy之间的相关系数。我们可以发现相关系数反映的是变量之间的线性关系和相关性的方向(第一排),而不是相关性的斜率(中间),也不是各种非线性关系(第三排)。请注意:中间的图中斜率为0,但相关系数是没有意义的,因为此时变量yyy是0。

皮尔逊相关系数举例

两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商:
ρx,y=cov⁡(x,y)σxσy=E[(x−μx)(y−μy)]σxσy\rho_{x,y} = \frac{\operatorname{cov}(x,y)}{\sigma_x \sigma_y} = \frac{E\left[(x - \mu_x)(y - \mu_y)\right]}{\sigma_x \sigma_y} ρx,y=σxσycov(x,y)=σxσyE[(xμx)(yμy)]上式定义了总体相关系数,常用希腊小写字母ρ\rhoρ作为代表符号。
估算样本的协方差和标准差,可得到皮尔逊相关系数,常用英文小写字母rrr代表:
r=∑i=1n(xi−xˉ)(yi−yˉ)∑i=1n(xi−xˉ)2∑i=1n(yi−yˉ)2=1n−1∑i=1n(xi−xˉsx)(yi−yˉsy)r=\frac{\sum_{i = 1}^{n}(x_i-\bar{x})(y_i-\bar{y})}{\sqrt{\sum_{i = 1}^{n}(x_i-\bar{x})^2}\sqrt{\sum_{i = 1}^{n}(y_i-\bar{y})^2}}= \frac{1}{n - 1} \sum_{i=1}^{n} \left( \frac{x_i - \bar{x}}{s_x} \right) \left( \frac{y_i - \bar{y}}{s_y} \right)r=i=1n(xixˉ)2i=1n(yiyˉ)2i=1n(xixˉ)(yiyˉ)=n11i=1n(sxxixˉ)(syyiyˉ)

注意第一个式子中分子和分母中的n−1n-1n1被约分掉了,sx=∑i=1n(xi−xˉ)2n−1s_x=\sqrt{\frac{\sum_{i = 1}^{n}(x_i-\bar{x})^2}{n-1}}sx=n1i=1n(xixˉ)2

其中,xˉ\bar{x}xˉyˉ\bar{y}yˉ分别是向量xxxyyy的均值,sxs_xsxxyx_yxy分别是向量xxxyyy的标准差,nnn是向量的维度。
皮尔逊相关系数的取值范围同样在[−1,1][-1,1][1,1]之间,1 表示完全正相关,-1 表示完全负相关,0 表示无线性相关。

适用场景:当数据中存在明显的均值差异时,皮尔逊相关系数的表现往往优于余弦相似度。例如,在电影评分系统中,用户 A 对所有电影的评分都比用户 B 高 1 分,但他们的喜好趋势一致,皮尔逊相关系数能准确识别这种相似性,而余弦相似度可能会受到评分绝对值的干扰。

欧氏距离:衡量空间距离的 “尺子”

欧氏距离是我们最熟悉的距离度量方式之一,它计算的是两个点在nnn维空间中的直线距离。

对于两个nnn维向量aaabbb,欧氏距离ddd的计算公式为:

d=∑i=1n(ai−bi)2d=\sqrt{\sum_{i = 1}^{n}(a_i - b_i)^2}d=i=1n(aibi)2

在相似度计算中,我们通常将欧氏距离转换为相似度,距离越小,相似度越大。 对应的相似度可以表示为
sim(a,b)=1/(1+d)sim(a,b)=1/(1 + d)sim(a,b)=1/(1+d)分母中+1+1+1的作用是让取值范围在(0,1](0,1](0,1]之间。

适用场景:欧氏距离适用于衡量两个对象在数值上的绝对差异。例如,在基于用户属性(如年龄、收入、消费频率等)的推荐中,欧氏距离可以有效判断用户之间的相似程度,年龄、收入等特征越接近的用户,可能具有更相似的消费需求。

但需要注意的是,欧氏距离对向量的量级比较敏感,在使用前通常需要对数据进行归一化处理,避免某一维度的数值过大影响整体结果。

Jaccard 相似度:衡量集合重叠的 “度量仪”

Jaccard 相似度主要用于衡量两个集合之间的相似性,它的计算方式是两个集合的交集大小除以并集大小。

对于两个集合AAABBB,Jaccard 相似度JJJ的计算公式为:
J=∣A∩B∣∣A∪B∣J=\frac{|A\cap B|}{|A\cup B|}J=ABAB

其中,∣A∩B∣|A\cap B|AB表示集合AAABBB的交集元素个数,∣A∪B∣|A\cup B|AB表示并集元素个数。

Jaccard 相似度的取值范围在[0,1][0,1][0,1]之间,值越接近 1,说明两个集合的重叠度越高,相似度越大。

适用场景:Jaccard 相似度在处理布尔型数据或集合数据时表现出色。例如,在用户的行为数据中(如浏览过的商品、收藏的文章等),我们可以将每个用户的行为看作一个集合,通过 Jaccard 相似度计算用户之间的相似性,交集越大的用户,兴趣可能越相近。

总结

相似度计算是推荐系统的核心基石,不同的相似度计算方法各有侧重和适用场景:余弦相似度擅长捕捉向量方向的相似性,皮尔逊相关系数能修正均值影响,欧氏距离适合衡量数值绝对差异,Jaccard 相似度则适用于集合重叠度计算。

在实际应用中,我们需要根据数据类型、业务场景以及推荐目标,选择合适的相似度计算方法,有时甚至需要结合多种方法进行综合判断。只有精准把握对象之间的相似性,推荐系统才能真正做到 “懂你所想,推你所爱”,为用户带来更优质的体验。

参考
【1】协方差和相关系数|说人话的统计学.讲人话的统计学.哔哩哔哩
【2】皮尔逊相关系数.百度百科
【3】相似度常用参数比较总结.老姚在路上.知乎

http://www.dtcms.com/a/270318.html

相关文章:

  • 【计算机网络】第三章:数据链路层(上)
  • Redis常用数据结构以及多并发场景下的使用分析:Sorted List类型
  • (电机03)分享FOC控制中SVPWM的输出关联硬件
  • 【6G新技术探索】A2A协议介绍
  • 数据出海的隐形冰山:企业如何避开跨境传输的“合规漩涡”?
  • BM10 两个链表的第一个公共结点
  • main(int argc,char **agrv)的含义
  • Kubernetes配置管理
  • Vue3组合式API应用:状态共享与逻辑复用最佳实践
  • 说说SpringBoot常用的注解?
  • [Datawhale AI夏令营]大模型技术-基于带货视频评论的用户洞察挑战赛上分分享
  • React Native 一些API详解
  • 【ElasticSearch实用篇-02】基本增删改查
  • LoRaWAN 有几种入网方式?
  • 4. 那在详细说一下 http 2.0 的特点
  • WinUI3入门16:Order自定义排序
  • ACE-Step:AI音乐生成基础模型
  • 代码详细注释:基于log.h的自定义日志库实现
  • 探索下一代云存储技术:对象存储、文件存储与块存储的区别与选择
  • Splunk练习 Boss of the SOC V1
  • 短视频矩阵系统的崛起:批量发布功能与多平台矩阵的未来
  • LeetCode 21. 合并两个有序链表
  • C#Halcon从零开发_Day18_OCR识别
  • 4. isaac sim4.2 教程-Core API-Hello robot
  • 【计算机组成原理】-CPU章节学习篇—笔记随笔
  • Linux 第一个系统程序 - 进度条
  • (C++)list列表相关基础用法(C++教程)(STL库基础教程)
  • 跨越NLP的三重曲线:从词法到叙事的进化之路
  • 使用python的 FastApi框架开发图书管理系统-前后端分离项目分享
  • huggingface笔记:文本生成Text generation