机器学习---常见的距离公式(欧氏距离、曼哈顿距离、标准化欧式距离、余弦距离、杰卡德距离、马氏距离、切比雪夫距离、闵可夫斯基距离、K-L散度)

1. 欧氏距离

       欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空

间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中

的欧氏距离就是两点之间的实际距离。

from scipy.spatial import distance
a = (1, 2, 3)
b = (4, 5, 6)print(distance.euclidean(a, b))

2. 曼哈顿距离 

        图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的

曼哈顿距离。曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离,即d(i,j)=|xi-

xj|+|yi-yj|。对于一个具有正南正北、正东正西方向规则布局的城镇街道,从一点到达另一点的距离

正是在南北方向上旅行的距离加上在东西方向上旅行的距离,因此,曼哈顿距离又称为出租车距

离。曼哈顿距离不是距离不变量,当坐标轴变动时,点间的距离就会不同。曼哈顿距示意图在早期

的计算机图形学中,屏幕是由像素构成,是整数,点的坐标也一般是整数,原因是浮点运算很昂

贵,很慢而且有误差,如果直接使用AB的欧氏距离(欧几里德距离:在二维和三维空间中的欧氏

距离的就是两点之间的距离),则必须要进行浮点运算,如果使用AC和CB,则只要计算加减法即

可,这就大大提高了运算速度,而且不管累计运算多少次,都不会有误差。

import numpy as np
from scipy.spatial import distanceA = np.array([7,8,9])
B = np.array([4,5,6])# 方式一:直接构造公式计算
dist1 = np.sum(np.abs(A-B))# 方式二:内置线性代数函数计算
dist2 = np.linalg.norm(A-B,ord=1)  #ord为范数类型,取值1(一范数),2(二范数),np.inf(无穷范数),默认2。# 方式三:scipy库计算
dist3 = distance.cityblock(A,B)

3. 标准化欧氏距离 

标准化欧⽒距离是针对欧⽒距离的缺点⽽作的⼀种改进。

既然数据各维分量的分布不⼀样,那先将各个分量都“标准化”到均值、⽅差相等。

S 表示各个维度的标准差:

如果将⽅差的倒数看成⼀个权重,也可称之为加权欧⽒距离(Weighted Euclidean distance)。

from scipy.spatial.distance import pdist
dist2 = pdist(Vec,’seuclidean’)

4. 余弦距离 

       ⼏何中,夹⻆余弦可⽤来衡量两个向量⽅向的差异;机器学习中,借⽤这⼀概念来衡量样本向

量之间的差异。

⼆维空间中向量A(x1,y1)与向量B(x2,y2)的夹⻆余弦公式:

两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹⻆余弦为: 

        夹⻆余弦取值范围为[-1,1]。余弦越⼤表示两个向量的夹⻆越⼩,余弦越⼩表示两向量的夹⻆

越⼤。当两个向量的⽅向 重合时余弦取最⼤值1,当两个向量的⽅向完全相反余弦取最⼩值-1。 

import numpy as np
from scipy.spatial import distanceA = np.array([7,8,9])
B = np.array([4,5,6])# 方式一:直接构造公式计算
dist1 = np.sum(A*B)/(np.sqrt(np.sum(A**2))*np.sqrt(np.sum(B**2)))# 方式二:scipy库计算
dist2 = 1-distance.cosine(A,B)

5.  汉明距离

 两个等⻓字符串s1与s2的汉明距离为:将其中⼀个变为另外⼀个所需要作的最⼩字符替换次数。

       汉明重量:是字符串相对于同样⻓度的零字符串的汉明距离,也就是说,它是字符串中⾮零的

元素个数,对于⼆进制字符串来说,就是 1 的个数,所以 11101 的汉明重量是 4。因此,向量空

间中的元素a和b之间的汉明距离等于它们汉明重量的差a-b。

应⽤:汉明重量分析在包括信息论、编码理论、密码学等领域都有应⽤。⽐如在信息编码过程中,

为了增强容错性,应使得编码间的最⼩汉明距离尽可能⼤。但是,如果要⽐较两个不同⻓度的字符

串,不仅要进⾏替换,⽽且要进⾏插⼊与删除的运算,在这种场合下,通常使⽤更加复杂的编辑距

离等算法。

import numpy as np
from scipy.spatial import distanceA = np.array([1,2,3])
B = np.array([4,5,6])# scipy库计算
dist1 = distance.hamming(A,B)

6. 杰卡德距离 

       杰卡德相似系数(Jaccard similarity coefficient):两个集合A和B的交集元素在A,B的并集中所

占的⽐例,称为两个集合的杰卡德相似系数,⽤符号J(A,B)表示:

       杰卡德距离(Jaccard Distance):与杰卡德相似系数相反,⽤两个集合中不同元素占所有元素

的⽐例来衡量两个集合的区分度: 

# 方案一
# 根据公式求解
up = np.double(np.bitwise_and((vec1!=vec2),np.bitwise_or(vec1!=0,vec2!=0)).sum())
down = np.double(np.bitwise_or(vec1!=0,vec2!=0).sum())
dist1=(up/down)
print("杰卡德距离测试结果是:"+str(dist1))
# 方案二
# 根据scipy库求解
from scipy.spatial.distance import pdist
Vec = np.vstack([vec1,vec2])
dist2 = pdist(Vec,'jaccard')
print("杰卡德距离测试结果是:"+str(dist2))

 7. 马氏距离

马氏距离是基于样本分布的⼀种距离。

马氏距离是由印度统计学家⻢哈拉诺⽐斯提出的,表示数据的协⽅差距离。它是⼀种有效的计算两

个位置样本集的相似 度的⽅法。 与欧式距离不同的是,它考虑到各种特性之间的联系,即独⽴于

测量尺度。

       马氏距离也可以定义为两个服从同⼀分布并且其协⽅差矩阵为∑的随机变量的差异程度,如果

协⽅差矩阵为单位矩阵, 马氏距离就简化为欧式距离;如果协⽅差矩阵为对角矩阵,则其也可称

为正规化的欧式距离。 

计算马氏距离过程中,要求总体样本数⼤于样本的维数,否则得到的总体样本协⽅差矩阵逆矩阵不

存在,这种情况 下,⽤欧式距离计算即可。

import numpy as np
from scipy.spatial.distance import pdist
a=np.random.random(10)
b=np.random.random(10)
#马氏距离要求样本数要大于维数,否则无法求协方差矩阵
X=np.vstack([a,b])
XT=X.T  #此处进行转置,表示10个样本,每个样本2维pdist(XT,'mahalanobis')

8. 切比雪夫距离 

        在数学中,切比雪夫距离或是L∞度量,是向量空间中的一种度量,二个点之间的距离定义是

其各坐标数值差绝对值的最大值。以数学的观点来看,切比雪夫距离是由一致范数(uniform

norm)(或称为上确界范数)所衍生的度量,也是超凸度量(injective metric space)的一种。

# 根据scipy库求解
from scipy.spatial.distance import pdist
Vec = np.vstack([vec1,vec2])
dist2 = pdist(Vec,'chebyshev')
print('切比雪夫距离测试结果是:' + str(dist2))

9. 闵可夫斯基距离 

       闵可夫斯基距离 (Minkowski Distance),也被称为 闵氏距离。它不仅仅是一种距离,而是将多

个距离公式(曼哈顿距离、欧式距离、切比雪夫距离)总结成为的一个公式

两个n维变量a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:

# 根据scipy库求解
from scipy.spatial.distance import pdist
Vec = np.vstack([vec1,vec2])
dist2 = pdist(Vec,'cityblock',p=1)
print('当P=1时就是曼哈顿距离,测试结果是:' + str(dist2))# 根据公式求解,p=1
from numpy import *
dist3 = sum(abs(vec1-vec2))# abs()绝对值
print('当p=1时就是曼哈顿距离,测试结果是:' + str(dist3))

10. K-L散度 

K-L散度(Kullback–Leibler divergence),又称K-L距离,相对熵。

当P(x)和Q(x)的相似度越高,K-L散度越小。

K-L散度主要有两个性质:

(1)不对称性

尽管KL散度从直观上是个度量或距离函数,但它并不是一个真正的度量或者距离,因为它不具有

对称性,即D(P||Q)!=D(Q||P)。

(2)非负性

相对熵的值是非负值,即D(P||Q)>0。

# 利用scipy API进行计算KL = scipy.stats.entropy(x, y)
print(KL)# 用公式编程就用px和pyKL = 0.0
for i in range(10):KL += px[i] * np.log(px[i] / py[i])
print(KL)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/103168.html

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

相关文章

分布式锁系列之zookeeper分布式锁和mysql分布式锁

目录 介绍 下载安装 基本指令​编辑 java集成zookeeper 官方提供版 永久节点 临时节点​编辑 永久序列化节点 判断当前节点是否存在 获取当前节点中的数据内容 获取当前节点的子节点 更新节点内容 删除节点 zookeeper实现分布式锁 Mysql实现分布式锁 总结 介绍 ZooK…

在家构建您的迷你 ChatGPT

ChatGPT 玩起来很有趣。您很可能还希望拥有自己的私下运行的副本。实际上,这是不可能的,因为 ChatGPT 不是一个可供下载的软件,并且它需要强大的计算机能力才能运行。但是您可以构建一个可以在商用硬件上运行的精简版本。在这篇文章中,您将了解 什么语言模型可以表现得像 C…

HDLBits-Verilog学习记录 | Verilog Language-Basics(2)

文章目录 9.Declaring wires | wire decl10. 7458 chip 9.Declaring wires | wire decl problem:Implement the following circuit. Create two intermediate wires (named anything you want) to connect the AND and OR gates together. Note that the wire that feeds the …

类加载器与双亲委派

类加载器与双亲委派 Java 类加载器(Class Loader)是 Java 虚拟机(JVM)的一部分,负责将类的字节码加载到内存中,并将其转换为可执行的 Java 对象。类加载器在 Java 应用程序中起着重要的作用,它…

【校招VIP】TCP/IP模型之常用协议和端口

考点介绍: 大厂测试校招面试里经常会出现TCP/IP模型的考察,TCP/IP协议是网络基础知识,是互联网的基石,不管你是做开发、运维还是信息安全的,TCP/IP 协议都是你绕不过去的一环,程序员需要像学会看书写字一样…

java.lang.UnsupportedOperationException解决方法

java.lang.UnsupportedOperationException解决方法 先放错误信息业务场景报错分析先看报错代码位置进入源码查看至此 真相大白 解决方法总结 先放错误信息 业务场景 已知有学生 张三李四王五赵六 等人 private List<String> nameList Arrays.asList("张三", &…

Nginx前后端服务器部署

Nginx作为正反向代理的中转站&#xff0c;是连接前后端网络服务的媒介 Nginx下载&#xff1a;http://nginx.org/download/http://nginx.org/download/ 一、上传到服务器固定路径下并解压 上传到/opt/software/nginx-1.19.0.tar.gz cd /opt/software/ tar -zxvf nginx-1.19.0.…

Orchestrator自身高可用性方案

目录 获得 HA 的方法 一 没有高可用性 &#xff08;No high availability&#xff09; 使用场景 架构组成 架构图 二 半高可用性&#xff08;Semi HA&#xff09; 三 基于共享数据库后端高可用&#xff08;HA via shared backend&#xff09; 四 基于Raft协议高可用 五…

【Terraform学习】使用 Terraform 从 EC2 实例访问 S3 存储桶(Terraform-AWS最佳实战学习)

使用 Terraform 从 EC2 实例访问 S3 存储桶 实验步骤 前提条件 安装 Terraform&#xff1a; 地址 下载仓库代码模版 本实验代码位于 task_ec2_s3connet 文件夹中。 变量文件 variables.tf 在上面的代码中&#xff0c;您将声明&#xff0c;aws_access_key&#xff0c;aws_…

shell 11(shell重定向输入输出)

一、标准输入输出 标准输入介绍 从键盘读取用户输入的数据&#xff0c;然后再把数据拿到Shell程序中使用; 标准输出介绍 Shell程序产生的数据&#xff0c;这些数据一般都是呈现到显示器上供用户浏览查看

数字 IC 设计职位经典笔/面试题(三)

共100道经典笔试、面试题目&#xff08;文末可全领&#xff09; 1. IC 设计中同步复位与异步复位的区别&#xff1f; 同步复位在时钟沿变化时&#xff0c;完成复位动作。异步复位不管时钟&#xff0c;只要复位信号满足条件&#xff0c;就完成复位动作。异步复位对复位信号要求…

第1章:计算机网络体系结构

文章目录 1.1 计算机网络 概述1.概念2.组成3.功能4.分类5.性能指标1.2 计算机网络 体系结构&参考模型1.分层结构2.协议、接口、服务3.ISO/OSI模型:七层4.TCP/IP模型:四层1.1 计算机网络 概述 1.概念

Arduino 入门学习笔记12 读写外置EEPROM

Arduino 入门学习笔记12 读写外置EEPROM 一、准备工作1. 外置 EEPROM 简介2. Arduino操作外置 EEPROM 流程 二、读写操作流程1. 写操作流程2. 读操作 三、示例代码 一、准备工作 1. 外置 EEPROM 简介 外置I2C接口的EEPROM是一种常用的非易失性存储器&#xff0c;通过I2C总线与…

石油和天然气行业如何实现数字化转型和工业4.0

石油和天然气行业的数字化转型正面临着前所未有的挑战和机遇。尽管过去相对滞后&#xff0c;这个复杂而庞大的行业正逐渐意识到数字化的紧迫性&#xff0c;以应对市场变化、降低运营成本、提高效率和确保可持续性。然而&#xff0c;数字化转型的进程并非一帆风顺&#xff0c;行…

echarts 之 科技感进度条

1.图片展示 2.代码实现 /* ng qty 进度条 */ <template><div class"ngqty-progress"><div class"ngqty-info"><span>X4</span><span>50%</span></div><div :id"barNgQtyProgress index" c…

【校招VIP】产品行测考点之图的推理和分析

考点介绍&#xff1a; 大厂产品校招笔试里经常会出现行测的考察&#xff0c;而图的推理是行测里面稍微有难度的一部分。因为时间有限&#xff0c;很多同学因为没有解题思路而丢分。 『产品行测考点之图的推理和分析』相关题目及解析内容可点击文章末尾链接查看&#xff01; 一…

第 7 章 排序算法(4)(插入排序)

7.7插入排序 7.7.1插入排序法介绍: 插入式排序属于内部排序法&#xff0c;是对于欲排序的元素以插入的方式找寻该元素的适当位置&#xff0c;以达到排序的目的。 7.7.2插入排序法思想: 插入排序&#xff08;Insertion Sorting&#xff09;的基本思想是&#xff1a;把n个待排…

Kaggle分类问题Titanic——Machine Learning from Disaster

目录 前言1 题目介绍2 数据清洗3 数据可视化分析4 模型训练5 源码 前言 这是我在大三选修课的课程设计&#xff0c;内容参考了Kaggle上高赞的代码&#xff0c;有详细批注&#xff0c;整体比较基础&#xff0c;结构相对完整&#xff0c;便于初学者学习。这个是一个分类问题&am…

【C语言】动态内存管理(malloc,free,calloc,realloc)-- 详解

一、动态内存分配 定义&#xff1a;动态内存分配 (Dynamic Memory Allocation) 就是指在程序执行的过程中&#xff0c;动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样&#xff0c;需要预先分配存储空间&#xff0c;而是由系统根据程…

基于微信小程序+Springboot校园二手商城系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、目前专注于大学生项目实战开发,讲解,毕业答疑辅导✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3…