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

常见的相似性度量方法

有如下几种计算相似性方法:

点积相似度

X ⋅ Y = ∣ X ∣ ∣ Y ∣ c o s θ = ∑ i = 1 n x i ∗ y i \begin{aligned} X \cdot Y &= |X||Y|cos\theta \\ &= \sum_{i=1}^n x_i * y_i \end{aligned} XY=X∣∣Ycosθ=i=1nxiyi

向量内积的结果是没有界限的,解决办法就是先归一化再相乘,就是下面的余弦相似度了。

余弦相似度

X ⋅ Y = ∑ i = 1 n x i ∗ y i ∑ i = 1 n ( x i ) 2 ∗ ∑ i = 1 n ( x i ) 2 X \cdot Y = \frac{\sum_{i=1}^n x_i * y_i}{\sqrt{\sum_{i=1}^n (x_i)^2} * {\sum_{i=1}^n (x_i)^2}} XY=i=1n(xi)2 i=1n(xi)2i=1nxiyi

余弦相似度衡量两个向量在方向上的相似性,并不关注两个向量的实际长度,即对绝对数据不敏感。

示例

用户对内容评分,5分制。A和B两个用户对两个商品的评分分别为A:(1,2)和B:(4,5)。使用余弦相似度得出的结果是0.98,看起来两者极为相似,但从评分上看A不喜欢这两个东西,而B比较喜欢。造成这个现象的原因就在于,余弦相似度没法衡量每个维数值的差异,对数值的不敏感导致了结果的误差。
需要修正这种不合理性,就出现了调整余弦相似度,即所有维度上的数值都减去一个均值。
比如A和B对两部电影评分的均值分别是(1+4)/2=2.5,(2+5)/2=3.5。那么调整后为A和B的评分分别是:(-1.5,-1.5)和(1.5,2.5),再用余弦相似度计算,得到-0.98,相似度为负值,显然更加符合现实。

注:为什么是在所有用户对同一物品的打分上求均值,每个人打分标准不一,对所有用户求均值,等于是所有用户的打分映射到了同一空间内。上述是在计算两个用户的相似度,以此类推计算两个物品的相似度,就要计算所有物品的均值了。

修正的余弦相似度可以说就是对余弦相似度进行归一化处理的算法,公式如下:
s ( A , B ) = ∑ i ∈ I ( R A , i − R i ˉ ) ( R B , i − R i ˉ ) ∑ i ∈ I ( R A , i − R i ˉ ) 2 ∑ i ∈ I ( R B , i − R i ˉ ) 2 s(A, B)=\frac{\sum_{i \in I}\left(R_{A, i}-\bar{R_i}\right)\left(R_{B, i}-\bar{R_i}\right)}{\sqrt{\sum_{i \in I}\left(R_{A, i}-\bar{R_i}\right)^2} \sqrt{\sum_{i \in I}\left(R_{B, i}-\bar{R_i}\right)^2}} s(A,B)=iI(RA,iRiˉ)2 iI(RB,iRiˉ)2 iI(RA,iRiˉ)(RB,iRiˉ)
R A , i R_{A,i} RA,i 表示用户A在商品i上的打分, R i ˉ \bar{R_i} Riˉ表示商品i在所有用户上的打分均值。

皮尔逊相关系数

Pearson 相关系数是用来检测两个连续型变量之间线性相关的程度,它解决了余弦相似度会收到向量平移影响的问题。取值范围为 [−1,1],正值表示正相关,负值表示负相关,绝对值越大表示线性相关程度越高:
ρ x , y = cov ⁡ ( x , y ) σ x σ y = E [ ( x − μ x , y − μ y ) ] σ x σ y = ∑ i ( x i − x ˉ ) ( y i − y ˉ ) ∑ i ( x i − x ˉ ) 2 ∑ i ( y i − y ˉ ) 2 \begin{aligned} \rho_{\boldsymbol{x}, \boldsymbol{y}} &= \frac{\operatorname{cov}(\boldsymbol{x}, \boldsymbol{y})}{\sigma_{\boldsymbol{x}} \sigma_{\boldsymbol{y}}} \\ &= \frac{E\left[\left(\boldsymbol{x}-\mu_{\boldsymbol{x}}, \boldsymbol{y}-\mu_{\boldsymbol{y}}\right)\right]}{\sigma_{\boldsymbol{x}} \sigma_{\boldsymbol{y}}} \\ &= \frac{\sum_i\left(x_i-\bar{x}\right)\left(y_i-\bar{y}\right)}{\sqrt{\sum_i\left(x_i-\bar{x}\right)^2} \sqrt{\sum_i\left(y_i-\bar{y}\right)^2}} \end{aligned} ρx,y=σxσycov(x,y)=σxσyE[(xμx,yμy)]=i(xixˉ)2 i(yiyˉ)2 i(xixˉ)(yiyˉ)
如果把 x ′ = x − x ˉ , y ′ = y − y ˉ x'=x-\bar{x}, y'=y-\bar{y} x=xxˉ,y=yyˉ ,那么皮尔逊系数计算的就是 x ′ 和 y ′ x' 和 y' xy 的余弦相似度。


参考

  • 点积相似度、余弦相似度、欧几里得相似度
  • 常用的特征选择方法之 Pearson 相关系数
  • 图片向量相似检索服务(2)——四种基本距离计算原理
    • 这篇博客倒是很简洁,适合速读
  • 点积相似度、余弦相似度、欧几里得相似度
  • 相似性和距离度量 (Similarity & Distance Measurement)
http://www.lryc.cn/news/107610.html

相关文章:

  • Day06-JS高级编程
  • 针对高可靠性和高性能优化的1200V硅碳化物沟道MOSFET
  • 开发框架软件公司:与之携手,共同开启办公流程化之路!
  • openCV C++环境配置
  • 8.3 作业 c高级
  • django实现部门表的增删改查界面
  • Tomcat的介绍和安装配置、eclipse中动态web项目的创建和运行、使用IDEA创建web项目并运行
  • idea操作——已经push到远程的代码回滚(不保留本地更改)
  • 无涯教程-Lua - 垃圾回收
  • DP(各种模型)
  • 开学在即,这个超好用的中小学新生录取查询系统制作方法值得借鉴
  • 使用Canvas裁剪图片
  • JavaScript |(三)内建对象 | 数组 | string对象 | 尚硅谷JavaScript基础实战
  • 势能线段树
  • 【phaser微信抖音小游戏开发004】往画布上增加文本以及文本的操作
  • 【1.4】Java微服务:服务注册和调用(Eureka和Ribbon实现)
  • QT中使用ffmpeg的api进行视频的播放
  • 使用idea实现git操作大全(在项目开发中遇到的实际情况
  • SQL面试题:一个优化案例
  • 链表的总体涵盖以及无哨兵位单链表实现——【数据结构】
  • 网页版Java五子棋项目(一)websocket【服务器给用户端发信息】
  • 企业大数据可视化案例专题分享-入门
  • GoogLeNet卷积神经网络-笔记
  • 腾讯云TencentOS Server镜像系统常见问题解答
  • 【项目 进程13】2.28共享内存(1) 2.29共享内存(2)
  • Flask框架-流量控制:flask-limiter的使用
  • 【机器学习】西瓜书习题3.5Python编程实现线性判别分析,并给出西瓜数据集 3.0α上的结果
  • Elasticsearch:通过动态修剪实现更快的基数聚合
  • Webpack5 生产模式压缩图片ImageMinimizerPlugin
  • 时序预测 | Matlab实现基于BP神经网络的电力负荷预测模型