常见的相似性度量方法

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

点积相似度

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.mzph.cn/news/22121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 框架

目录 Spring 如何解决 bean 的循环依赖?什么是 AOP?Spring 如何实现的?BeanFactory 和 ApplicationContext 有什么区别?介绍一下 Spring bean 的生命周期Spring 的隔离级别Spring 框架用到了哪些设计模式?并举出典型例子Spring 如何解决 bean 的循环依赖? Spring中引入三…

918. 环形子数组的最大和;2531. 使字符串总不同字符的数目相等;1238. 循环码排列

918. 环形子数组的最大和 核心思想:其实这题不加环形很好做,就是一个动态规划或者贪心就能够解决。加了环形我们应该怎么考虑呢,无非就是两种,第1种是子数组只包含首尾的一个,我们直接求子数组的最大连续和即可&#…

服务器运行python程序的使用说明

服务器的使用与说明 文章目录 服务器的使用与说明1.登录2.Python的使用2.1 服务器已安装python32.2 往自己的用户目录安装python31.首先下载安装包2.解压缩3.编译与安装 2.3 新建环境变量2.4 测试 3 创建PBS作业并提交 1.登录 windowsr打开运行命令窗口,在运行框中…

Leaflet.Control.Opacity 控制图层的透明度

最新有一个需求,能动态的控制Leaflet.js 地图图层的透明度,官网文档: https://leafletjs.com/reference.html#gridlayer-setopacity 一直有个setOpacity方法,我以为拿来就能使呢,其实不行。后来找到一个日本人开发的demo: 右侧Co…

2023值得关注的人工智能7大发展趋势

随着人工智能技术的不断创新和应用,我们可以看到人工智能在各个领域的应用越来越广泛。其中,有一些趋势特别值得我们关注。 1)深度学习技术的发展 深度学习技术在图像识别、语音识别、自然语言处理等领域表现出色,随着硬件计算能…

部署安装私服-Gitlab

一、国内的gitlab是极狐 www.gitlab.cn 国服 www.github.com 国际服 二、国服的gitlab蛮适合中国国情的 1.提交申请可以获得30天的订阅版服务,有需要的话可以先提交一下。订阅后功能多一些。 Gitlab中文官网下载_GitLab免费下载安装_极狐GitLab免…

OpenCV中常用算子

一、图像运算 Mat src, src1, src2, dst;// 图像运算 加 减 乘 除cv::add(src1, src2, dst); // 相加:src1src2cv::scaleAdd(src1, 1.0, src2, dst); // 相加:1.0*src1src2cv::addWeighted(src1, 0.3, src2, 0.7,…

计算机视觉:替换万物Inpaint Anything

目录 1 Inpaint Anything介绍 1.1 为什么我们需要Inpaint Anything 1.2 Inpaint Anything工作原理 1.3 Inpaint Anything的功能是什么 1.4 Segment Anything模型(SAM) 1.5 Inpaint Anything 1.5.1 移除任何物体 1.5.2 填充任意内容 1.5.3 替换任…

【设计模式——学习笔记】23种设计模式——访问者模式Visitor(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入要求传统方案 介绍基本介绍应用场景登场角色尚硅谷版本《图解设计模式》版本 案例实现案例一实现拓展 案例二(个人感觉这个案例较好)实现分析拓展一拓展二拓展三 总结额外知识双重分发 文章说明 案例引入 要求 测评系统需求:将观众分为男人和女人…

学了一个礼拜 JavaScript 为什么还是学不会?

前言 首先从你的描述里面我先以我的主观臆断来猜测一下你是没有任何编程的基础的,Js按理来说在各语言中并不是非常难学,当然如果你是纯新手入门,那么确实前期需要时间来沉淀一下语法,一个礼拜的话,按理来说应该是在沉…

以Llama-2为例,在生成模型中使用自定义LogitsProcessor

以Llama-2为例,在生成模型中使用自定义LogitsProcessor 1. 前言2. 场景介绍3. 解决方法4. 结语 1. 前言 在上一篇文章 以Llama-2为例,在生成模型中使用自定义StoppingCriteria中,介绍了怎样在生成的过程中,使用stopping criteria…

T31开发笔记:librtmp拉流测试

若该文为原创文章,转载请注明原文出处。 T31使用librtmp拉流并保存成FLV文件或H264和AAC文件。 librtmp编译在前面有教程,自行编译。 实现的目的是想要获取获取rtmp的AAC流并播放,实时双向对讲功能。 一、硬件和开发环境 1、硬件&#xff1…

Vue组件化开发--公共组件的封装

在Vue中,组件是构建用户界面的基本单位。封装公共组件是一种良好的实践,可以提高代码的可复用性和可维护性。下面是一个示例,演示了如何封装一个公共的按钮组件。 首先,创建一个名为Button.vue的Vue组件文件。这个组件将封装一个…

node.js相关的npm包的集合

一、实用功能 1. qs 一个简单易用的字符串解析和格式化库 2.rxjs RxJS是一组模块化的库,用于使用 JavaScript 中的可观察集合和组合来组合异步和基于事件的程序。 3. mitt 微型 200b 功能事件发射器/发布订阅. 4.Underscore.js Underscore.js是一个用于 JavaScript…

Linux C++ 链接数据库并对数据库进行一些简单的操作

一.引言(写在之前) 在我们进行网络业务代码书写的时候,我们总是避免对产生的数据进行增删改查,为此,本小博主在这里简历分享一下自己在Linux中C语言与数据之间交互的代码的入门介绍。 二.代码书写以及一些变量和函数的…

Vue3 nodejs 安装和配置---vue3教程一

文章目录 前言1、nodejs安装2、配置缓存路径:3、 阿里镜像cnpm使用4、 yarn安装5、配置nodejs国内镜像6、查看各个版本7、node npm yarn概念8、nodejs 和vue 关系外传 前言 本人主做后端Java,以前搞全栈开发是,还没有vue,rect等前端框架&…

MGRE综合

实验 一、实验思路 1.先按照上图配置IP地址及环回 2.写缺省使公网可通 3.让R1、R4、R5每台路由器均成为中心站点形成全连网状结构拓扑 4.让R1成为中心站点R2R3为分支站点 5.分区域宣告ospf之后更改ospf在虚拟接口Tunnel工作方式为broadcast及让R1 当选DR 二、上虚拟机操作…

[CKA]考试之一个 Pod 封装多个容器

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Task 创建一个Pod,名字为kucc1,这个Pod包含4容器&#xff…

《向量数据库指南》——腾讯云向量数据库Tencent Cloud Vector DB正式上线公测!提供10亿级向量检索能力

8月1日,腾讯云向量数据库(Tencent Cloud Vector DB)已正式上线公测。在腾讯云官网上搜索“向量数据库”,就可以正式体验该产品。 腾讯云向量数据库不仅能为大模型提供外部知识库,提高大模型回答的准确性,还可广泛应用于推荐系统、文本图像检索、自然语言处理等 AI 领域。…

Vue的 hash 模式与 history 模式

为了能够在改变视图的同时,不向后端发出网络请求。浏览器提供了 hash 模式与 history 模式。 而 vue 中的路由器就是利用了这两种模式,来实现前端路由的。 路由器的 hash 模式: 一、在 router 目录下的 index.js 文件中,通过 m…