【数据挖掘】机器学习中相似性度量方法-欧式距离

写在前面:
首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。

路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就一定能够把宏伟目标变为美好现实。

最近在做实际项目时,遇到需要计算两个向量的相似性,即需要计算不同数据样本之间的相似度。计算样本之间相似度的方法有很多,也很有学问,直接影响后续的计算结果。

本次将持续更新“相似性度量(similarity measurement)”系列文章,今天先介绍欧式距离

在这里插入图片描述

1、欧式距离

欧式距离(Euclidean Distance)是一种在多维空间中测量两个点之间“直线”距离的方法。在二维和三维空间中,欧氏距离就是两点之间的实际距离,即我们通常所说的“直线距离”。在更高维的空间中,这个概念依然适用,只是我们无法直接可视化这种距离。

2、计算公式

2.1 二维平面

二维平面两个点A( x 1 , y 1 x_ 1, y_ 1 x1,y1)和B( x 2 , y 2 x_ 2, y_ 2 x2,y2)之间的欧式距离:
  d ( A , B ) = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 \ d(A,B) = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2 }  d(A,B)=(x1x2)2+(y1y2)2

2.2 三维空间

三维空间两个点A( x 1 , y 1 , z 1 x_ 1,y_ 1, z_ 1 x1,y1,z1)和B( x 2 , y 2 , z 2 x_ 2,y_ 2, z_ 2 x2,y2,z2)之间的欧式距离:

  d ( A , B ) = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + ( z 1 − z 2 ) 2 \ d(A,B) = \sqrt{(x_1 - y_1 )^2 + (x_2 - y_2)^2 + (z_1 - z_2)^2}  d(A,B)=(x1y1)2+(x2y2)2+(z1z2)2

2.3 高维空间

两个向量A( x 1 , x 2 , x 3 , . . . , x n x_ 1,x_ 2, x_ 3, ..., x_ n x1,x2,x3,...,xn)和B( y 1 , y 2 , y 3 , . . . , y n y_ 1,y_ 2, y_ 3,..., y_ n y1,y2,y3,...,yn)之间的欧式距离

  d ( A , B ) = ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + … + ( x n − y n ) 2 \ d(A,B) = \sqrt{(x_1 - y_1 )^2 + (x_2 - y_2)^2 + \ldots + (x_n - y_n)^2}  d(A,B)=(x1y1)2+(x2y2)2++(xnyn)2

3、代码实现

编写代码实现欧式距离,在Python中,可以使用numpy库或者scipy来计算两个向量之间的欧式距离:

# -*- coding: utf-8 -*-
"""
Created on Fri Jun 14 22:36:45 2024

@author: AIexplore微信公众号
"""


import numpy as np  
from scipy.spatial.distance import euclidean  

  
def euclidean_distance_1(vec1, vec2):  
    """  
    计算两个向量之间的欧式距离  
      
    参数:  
    vec1 -- 第一个向量,numpy数组  
    vec2 -- 第二个向量,numpy数组  
      
    返回:  
    dist -- 两个向量之间的欧式距离  
    """  
    dist = np.sqrt(np.sum((vec1 - vec2)**2))  
    return dist  
  
    
def euclidean_distance_2(vec1, vec2):  
    dist = euclidean(vec1, vec2)
    return dist 
    

# data
vec1 = np.array([1, 2, 3])  
vec2 = np.array([4, 5, 6])  

# 使用numpy计算欧式距离
d1 = euclidean_distance_1(vec1, vec2)
print("欧式距离 1:", d1)

# 使用scipy的euclidean函数计算欧式距离  
d2 = euclidean_distance_2(vec1, vec2)  
print("欧式距离 2:", d2)

  • 使用numpy计算欧式距离

euclidean_distance_1函数接受两个numpy数组作为参数,并返回它们之间的欧式距离。函数内部,使用numpy的sqrt函数和sum函数来计算平方差的总和的平方根,从而得到欧式距离。

  • 使用scipy计算欧式距离

首先从scipy.spatial.distance模块中导入了euclidean函数。然后,定义了两个numpy数组vec1和vec2,它们分别代表两个点或向量的坐标。最后,调用euclidean_distance_2函数并传入这两个向量作为参数,得到了它们之间的欧式距离。

参考文章

1、https://mp.weixin.qq.com/s/zBHt9A-4FV4tsnSDRfBy-g
2、https://mp.weixin.qq.com/s/g1-U59Xo7ScjscyrL61Ujw
3、https://www.cnblogs.com/heaad/archive/2011/03/08/1977733.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 使用第三方库管理工具 vcpkg

一、介绍 Windows下开发C/C程序,少不了用开源的第三方库。比如线性代数和矩阵分析的库eigen,或者图像处理的OpenCV库。虽然这些库都是开源的,但是由于要编译debug和release版本的,32位以及64位的,如果像FFmpeg…

跨境电商测评、采购大额下单自养号需要解决哪些技术原理?

市场上有许多伪装工具,但大多数只是为了方便开发人员测试系统程序,它们并不能针对特定的电商平台进行伪装。每个电商平台都有其独特的风控机制,因此,我们需要从硬件环境的底层配合软件控制,以满足各平台的检测规则。 …

【测试】软件测试方案—实际项目直接套用(Word原件)

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.2. 测试环境 4.2.…

Java 网站开发入门指南:如何用java写一个网站

Java 网站开发入门指南:如何用java写一个网站 Java 作为一门强大的编程语言,在网站开发领域也占据着重要地位。虽然现在 Python、JavaScript 等语言在网站开发中越来越流行,但 Java 凭借其稳定性、可扩展性和丰富的生态系统,仍然…

Aigtek电压放大器的标准参数是什么

电压放大器是电子电路中常用的一种器件,主要用于放大输入电压信号。为了评价和比较不同的电压放大器,有一些标准参数被广泛应用。下面将详细介绍电压放大器的几个常见标准参数。 首先是增益。增益是衡量电压放大器输出信号与输入信号之间的倍数关系&…

【乐吾乐2D可视化组态编辑器】开关、阀门、报警状态切换

开关状态 开关的断开与闭合:将电力组件的“开”与“关”2个组件重叠在一起,右键选择“组合为状态”,属性面板中就可以任意切换状态。 视频教程:开关阀门多状态控制 乐吾乐2D可视化组态编辑器地址:https://2d.le5le.co…

30KW高原汽油发电机,海拔5000米可使用

大汉动力高原汽油发电机是专为高原地区设计的发电设备,其设计和特性考虑了高原环境的特别性。以下是关于高原汽油发电机的一些关键信息: 设计特点: 高原适应性:高原地区海拔高,空气稀薄,氧气含量低&#x…

高考志愿填报选专业,兴趣爱好和就业前景哪个优先?

每个人都有自己的兴趣与爱好,而高考志愿填报是在为自己选择职业方向。最理想的状态就是把自己的兴趣和爱好与自己的职业统一起来,让兴趣和爱好促进职业的发展,为职业增添动力。但现实生活中,这种理想的状态并不是每个人都能达到的…

前端技术回顾系列 11|TS 中一些实用概念

在微信中阅读,关注公众号:CodeFit。 创作不易,如果你觉得这篇文章对您有帮助,请不要忘了 点赞、分享 和 关注 我的公众号:CodeFit,为我的持续创作提供动力。 上文回顾:泛型在类和接口中的应用 上一篇文章我们回顾了 泛型 在 类 和 接口 中的应用。 通过使用泛型,我们…

工资信息管理系统的设计

管理员账户功能包括:系统首页,个人中心,基础数据管理,公告管理,津贴管理,管理员管理,绩效管理 用户账户功能包括:系统首页,个人中心,公告管理,津…

Python酷库之旅-比翼双飞情侣库(08)

目录 一、xlrd库的由来 二、xlrd库优缺点 1、优点 1-1、支持多种Excel文件格式 1-2、高效性 1-3、开源性 1-4、简单易用 1-5、良好的兼容性 2、缺点 2-1、对.xlsx格式支持有限 2-2、功能相对单一 2-3、更新和维护频率低 2-4、依赖外部资源 三、xlrd库的版本说明 …

苹果AI入华探讨及Apple Intelligence体验分析

引言 近日,苹果在WWDC 2024上引起了广泛关注。尽管苹果在发布会上并未明确提到“AI”一词,但从其展示的众多新功能中可以看出,AI已深深嵌入到其产品中。那么,苹果AI何时能在中国落地?它的模型大小是多少?用…

精品丨PowerBI迁移到SSAS

业务场景: 企业初期在进行 BI 可视化路线的时候,往往不会选择方案较为完整的SSAS,而是会选择轻量的 PowerBI 方案,究其根本还是软件成本的问题。 但是随着模型越来越臃肿,维护成本越来越高,有很多模型需要进…

leetcode LRU 缓存

leetcode: LRU 缓存 LRU 全称为 Least Recently Used,最近最少使用,常常用于缓存机制,比如 cpu 的 cache 缓存,使用了 LRU 算法。LRU 用于缓存机制时,关键的是当缓存满的时候有新数据需要加载到缓存的,这个…

9.1 图片的分割处理(c++)

本文的图片处理分为图片分割、图像的亚像素坐标处理。亚像素处理的原理可以看论文一种基于多项式插值改进的亚像素细分算法,该论文的详解及c的代码实现可以看博文基于多项式插值的亚像素边缘定位算法_基于多项式插值的亚像素算法-CSDN博客。下面的内容很多来自以上博…

简单Mesh多线程合并,使用什么库性能更高

1)简单Mesh多线程合并,使用什么库性能更高 2)Unity Semaphore.WaitForSignal耗时高 3)VS编辑的C#代码注释的中文部分乱码 4)变量IntPtr m_cachePtr切换线程后变空 这是第389篇UWA技术知识分享的推送,精选了…

Stability AI最新的SD3模型存在严重问题 为规避裸体结果导致躯体部分错乱

人工智能 Stability AI 最新的 SD3 Medium 模型存在严重问题,只要生成人物就会出现躯体错乱,这似乎是该公司刻意规避生成裸体图片的结果。目前猜测他们可能在训练过程中就剔除了 NSFW 内容,同时在训练时规避裸体内容进而导致模型也会刻意将人…

03 Tricks

一:Auto-ML的一般形式 还可以支持这个CV啦lp啦,还有多模态啦,都还有很多很多任务啊,都可以支持啊 Auto-Sklearn Auto-Pytorch 结构搜所:神经网络搜所算法: AutoGluon 02 >自动特征工程 Tsfresh Boru…

ATF是如何完成双系统切换的?

ATF(Arm Trusted Firmware)是一个用于ARM架构处理器的可信固件,它最初提供的最主要的功能就是:双系统切换和电源管理。 那么如何进行双系统切换呢,在双系统切换的示例中,除了CPU的跳转,例如CPU…

用Rust手把手编写一个Proxy(代理), 开始动工

https://shop.kongfz.com/795263/ 代理端和代理服务端之间可用自有格式来实现多路复用以减少连接的建立断开的开销,目前暂未实现代理服务端。 类结构 proxy.rs 负责代理结构的存储,监听类型,监听地址,是否有父级地址,认证账号密码等。 flag.rs 监听类型的二进制结构,…