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

机器学习-计算数据之间的距离

目录

欧氏距离

欧氏距离应用场景:

  1. 聚类分析:在聚类算法中(K-means)中,可以使用欧式距离来衡量数据点之间的相似性或距离,以便于将他们划分到不用的簇中。
  2. 特征匹配:在计算机视觉和图像处理中,可以使用欧氏距离来比较两个特征向量之间的相似性,如图像检索,图像分类,人脸识别等任务。
  3. 数据降维:在主成分分析(PCA)和线性判别分析(LDA)等降维技术中,可以使用欧氏距离来衡量高维数据空间中的变量之间的相似性,从而进行有效的特征选择和降维。
  4. 推荐系统:在协同过滤推荐算法中,可以使用欧氏距离来衡量用户之间的兴趣相似性,从而根据用户的历史行为向其推荐相似的物品或内容。
  5. 数据挖掘:在聚类,分类和异常检测层数据挖掘任务中,可以使用欧氏距离来度量数据点之间的差异和相似性,以便进行模式识别和异常检测。
    大多数情况欧式距离都是比较适合的。但是对于某些特殊类型的
    欧氏距离是最常见的距离度量方法,它定义为两个点之间的直线距离。对于两个n维向量X和Y,欧氏距离可以表示为: d ( x , y ) = ( ( x 1 − y 1 ) 2 + ( x 2 − y 2 ) 2 + ⋅ ⋅ ⋅ ⋅ ⋅ ⋅ + ( x n − y n ) 2 ) d(x,y)=\sqrt((x_1-y_1)^2+(x_2-y_2)^2+······+(x_n-y_n)^2) d(x,y)=( (x1y1)2+(x2y2)2+⋅⋅⋅⋅⋅⋅+(xnyn)2)
    代码实现:
import numpy as np
from scipy.spatial.distance import cdist# 示例数据
data = np.array([[1, 2, 3], [4, 5, 6]])# 计算欧氏距离矩阵
distance_matrix = cdist(data, data, metric='euclidean')print("欧氏距离矩阵:\n", distance_matrix)

这里使用了scipy包中的的cdist。
也可以进行自定义:

import numpy as npdef euclidean_distance(x,y):x = np.array(x)y = np.array(y)distance = np.sqrt(np.sum(np.square(x-y))return distance
data1 = [1,2,3]
data2 = [4,5,6]
distance = euclidean_distance(data1,data2)

曼哈顿距离

曼哈顿距离主要应用场景:

  1. 路径规划和导航:在特定的城市区域或地图上,可以使用曼哈顿距离来估计两点之间的实际行驶距离或路程,从而确定最短路径或导航方案。

  2. 电子商务:在购物网站或电子商务平台上,可以使用曼哈顿距离来衡量产品或服务之间的相似性,从而向用户推荐相关的商品或服务。

  3. 计算机视觉:在图像处理和计算机视觉领域中,可以使用曼哈顿距离来比较两个图像之间的相似性或距离,例如在文本检测和OCR(光学字符识别)中使用。

  4. 数据挖掘:在聚类、分类和异常检测等数据挖掘任务中,可以使用曼哈顿距离来度量数据点之间的差异和相似性,以便进行模式识别和异常检测。

  5. 传感器网络:在传感器网络中,可以使用曼哈顿距离来估计物理位置或传感器之间的距离,从而实现位置估计和目标跟踪等任务。
    曼哈顿距离是在城市街区中的距离度量方法,它表示两点之间沿着坐标轴的总距离。
    曼哈顿距离采用各个坐标点之间的绝对值之和,它的距离定义为:
    d ( x , y ) = ∣ x 1 − y 1 ∣ + ∣ x 2 − y 2 ∣ + ⋅ ⋅ ⋅ + ∣ x n − y n ∣ d(x,y)=|x_1-y_1|+|x_2-y_2|+···+|x_n-y_n| d(x,y)=x1y1+x2y2+⋅⋅⋅+xnyn
    自定义曼哈顿距离

import numpy as npdef manhattan_distance(x,y):x = np.array(x)y = np.array(y)distance = np.sum(np.abs(x-y))return distance
data1 = [1,2,3]
data2 = [4,5,6]
distance = manhattan_distance(data1,data2)

使用cdist库来进行实现

distance.cdist(x,x,"cityblock")

闵可夫斯基距离

闵可夫斯基距离是欧氏距离和曼哈顿距离的一般化形式,可以表示为:$ d ( x , y ) = ( ∣ x 1 − y 1 ∣ p + ∣ x 2 − y 2 ∣ p + . . . + ∣ x n − y n ∣ p ) ( 1 / p ) d(x, y) = (|x1 - y1|^p + |x2 - y2|^p + ... + |xn - yn|^p)^{(1/p)} d(x,y)=(x1y1p+x2y2p+...+xnynp)(1/p),其中p为正实数。

import numpy as npdef minkowski_distance(x,y):x = np.array(x)y = np.array(y)distance = np.power(np.sum(np,power(np.abs(x-y), p)),1/p)return distancedata1 = [1,2,3]
data2 = [4,5,6]
p = 2 # 欧氏距离’
distance=minkowski_distance(data1,data2,p)

使用cdist库来实现

from scipy.spatial.distance import cdist# 示例数据
data1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
data2 = [[9, 8, 7], [6, 5, 4], [3, 2, 1]]
p = 2  # 欧氏距离# 使用cdist计算闵可夫斯基距离
distance_matrix = cdist(data1, data2, metric='minkowski', p=p)print("距离矩阵:")
print(distance_matrix)

切比雪夫距离

切比雪夫距离是在棋盘格上的距离度量方法,它表示两点之间坐标数值差的最大值。
切比雪夫距离是指两个点之间各个坐标数值差绝对值的最大值,定义为:
d ( x , y ) = m a x i ( ∣ x i − y i ∣ ) d(x,y)=max_i(|x_i-y_i|) d(x,y)=maxi(xiyi)

import numpy as np
def chebyshev_distance(x,y):x = np.array(x)y = np.array(y)distance = np.max(np.abs(x-y))return distance
data1 = [1,2,3]
data2 = [4,5,6]
distance = chebyshev_distance(data1,data2)

使用cdist库来实现

distance.cdist(x,x,"chebyshev")

余弦距离

余弦距离通常用于计算文本和稀疏数据之间的相似度。余弦相似度度量的是两个向量之间的角度关系,而不是其具体数值大小。余弦相似度定义为两个向量的内积除以它们的模长乘积。
余弦距离是通过测量两个向量夹角来进行度量两个向量之间的相似性,余弦距离定义为:
d ( x , y ) = x ∗ y ∑ x i 2 ∗ ∑ y i 2 d(x,y)=\frac{x*y}{\sqrt{ \sum x_i^2}*\sqrt{\sum y_i^2}} d(x,y)=xi2 yi2 xy

import numpy as np
def cosine_distance(x, y):x = np.array(x)y = np.array(y)# 计算向量的内积dot_product = np.dot(x, y)# 计算向量的模长norm_x = np.linalg.norm(x)norm_y = np.linalg.norm(y)# 计算余弦距离distance = 1-(dot_product / (norm_x * norm_y))return distancedata1=[1,2,3]
data2=[4,5,6]
distance = cosine_distance(data1,data2)

使用cdist库实现

distance.cdist(x,x,"cosine")

相关系数距离

相关系数距离主要用于衡量个两个变量之间的相关性或者相似度。它可以用来比较两个向量,时间序列或者数据集之间的相似程度,如下场景可能会用到:

  1. 数据分析和统计学:相关系数距离可用于评估不同变量之间之间的相关性,在数据分析和统计学中,我们可以使用相关系数距离来确定两个变量之间的线性关系强弱。
  2. 机器学习和数据挖掘:在特征选择,聚类,回归和分类等机器学习任务中,相关系数距离可以用作相似性度量。例如在聚类算法中,可以使用相关系数距离来测量数据点之间的相似程度,进而将相似的数据点分组。
  3. 图像处理和计算机视觉:相关系数距离可以用于图像匹配和相似性比较。通过计算连个图像之间的相关系数距离,来评估他们之间的相似度,用于图像检索,目标识别和图形匹配等应用。
  4. 自然语言处理和文本挖掘:在文本分析领域,相关数据里可以用于比较文本之间的相似性。通过计算文本之间的相关系数距离,可以进行文本聚类,文档相似度计算和信息检索等任务。
    相关系数距离只能测量线性关系的相似性,对于非线性关系的判断不太准确。
    定义为:
    d ( x , y ) = ( x − x ˉ ) ∗ ( y − y ˉ ) ∑ x i − X ˉ ∗ ∑ y i − Y ˉ d(x,y)=\frac{(x-\bar x)*(y-\bar y)}{\sqrt{\sum x_i-\bar X}*\sqrt{\sum y_i -\bar Y}} d(x,y)=xiXˉ yiYˉ (xxˉ)(yyˉ)
import math# 示例数据
vector1 = [1, 2, 3]
vector2 = [4, 5, 6]# 计算平均值
mean1 = sum(vector1) / len(vector1)
mean2 = sum(vector2) / len(vector2)# 计算标准差
std1 = math.sqrt(sum((x - mean1) ** 2 for x in vector1) / len(vector1))
std2 = math.sqrt(sum((x - mean2) ** 2 for x in vector2) / len(vector2))# 计算协方差
covariance = sum((x - mean1) * (y - mean2) for x, y in zip(vector1, vector2)) / len(vector1)# 计算相关系数距离
correlation_distance = 1 - (covariance / (std1 * std2))print("相关系数距离:", correlation_distance)

使用库函数来进行实现:

# 二维以上因为cdist中的参数是向量,
distance.cdist(x,x,"correlation")
# 或者使用numpy中的corrcoef库
data1 = [1,2,3]
data2 = [4,5,6]
# 计算相关系数
correlation_coefficient = np.corrcoef(data1, data2)[0,1]
# 计算相关系数距离
correlation_distance = 1-correlation_coefficient

马氏距离

马氏距离表示数据的协方差距离,是一种计算两个未知样本集的相似度的有效方法,距离定义为:
d ( x , y ) = ( X − Y ) T ∑ − 1 ( X − Y ) d(x,y)=\sqrt{(X-Y)^T\sum ^{-1}(X-Y)} d(x,y)=(XY)T1(XY)

distance.cdist(x,x,"mahalanobis")

相关文章:

机器学习-计算数据之间的距离

目录 欧氏距离 欧氏距离应用场景: 聚类分析:在聚类算法中(K-means)中,可以使用欧式距离来衡量数据点之间的相似性或距离,以便于将他们划分到不用的簇中。特征匹配:在计算机视觉和图像处理中,可以使用欧氏…...

Uniapp软件库源码 全新带勋章功能(包含前后端源码)

Uniapp软件库全新带勋章功能,搭建好后台 在前端找到 util 这个文件 把两个js文件上面的填上自己的域名, 电脑需要下载:HBuilderX 登录账号 没有账号就注册账号,然后上传文件,打包选择 “发行” 可以打包app h5等等。…...

陪诊小程序|陪诊小程序关爱健康,无忧陪伴

随着社会发展和人们生活水平的提高,健康问题成为人们关注的焦点。然而,在就医过程中,许多患者常常感到孤独和无助,缺乏得到家人陪伴的温暖与安慰。为了解决这一问题,我们公司开发了一款创新的陪诊小程序软件&#xff0…...

uni-app小程序使用DCloud(插件市场)流程

一、DCloud(插件市场) DCloud 是uni-app官方插件市场,里面有官方、团队、个人发布的众多插件,包括uni-ui、uni-pay 等。而像uni-ui这种大型组件库都有官方文档可参考,但一些团队或个人发布的小型插件没有文档&#xf…...

非平稳信号分析和处理、STFT的瞬时频率研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

SIPp使用经验

xml文件&#xff0c;建议<?xml version"1.0" encoding"UTF-8" ?>&#xff0c;不建议ISO-8859-1命令行传key参数 sipp -key contact_port 9999 ...<send retrans"500"><![CDATA[REGISTER sip:[field1]:[remote_port] SIP/2.0Vi…...

ChessGPT:免费好用的国际象棋对弈AI机器人

对于国际象棋初学者&#xff0c;需要找一个对手来练棋。ChessGPT&#xff0c;就是一个免费好用的AI对弈机器人&#xff0c;非常适合新手来提升&#xff0c;是一个很好的练习伙伴。网站地址是&#xff1a;https://www.chess.com/play/computer&#xff0c;也有手机版app&#xf…...

华为OD 区间交集(200分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...

Python算法:八大排序算法以及速度比较

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…...

半导体用超高纯管材行业头部企业市场占有率及排名调研报告

内容摘要 本文调研和分析全球半导体用超高纯管材发展现状及未来趋势&#xff0c;核心内容如下&#xff1a; &#xff08;1&#xff09;全球市场总体规模&#xff0c;分别按销量和按收入进行了统计分析&#xff0c;历史数据2018-2022年&#xff0c;预测数据2023至2029年。 &…...

Qt中的线程同步:确保多线程程序的安全性

在现代计算机编程中,多线程编程已经变得非常常见,因为它可以提高程序的性能和响应能力。然而,多线程编程也引入了许多挑战,其中一个主要挑战是线程同步。线程同步是确保多个线程协同工作时数据的安全性和一致性的关键问题。Qt作为一种流行的C++框架,提供了丰富的工具和类来…...

ESRI ArcGIS Desktop 10.8.2图文安装教程及下载

ArcGIS 是由美国著名的地理信息系统公司 Esri 开发的一款地理信息系统软件&#xff0c;它是目前全球最流行的 GIS 软件之一。ArcGIS 提供了图形化用户界面和数据分析工具&#xff0c;可以帮助用户管理、分析和可视化各种空间数据。ArcGIS Desktop是一个完整的桌面GIS软件套件&a…...

笔记本电脑Windows10安装

0 前提 安装windows10的电脑为老版联想笔记本电脑&#xff0c;内部没有硬盘&#xff0c;临时加装了1T的硬盘。 1u盘准备 准备u盘&#xff0c;大小大于16G。u盘作为系统盘时&#xff0c;需要将内部的其他文件备份&#xff0c;然后格式化。u盘格式化后&#xff0c;插入一款可以…...

跨域方案的抉择

前言 遇到跨域问题的时候&#xff0c;到底是使用CORS来解决&#xff0c;还是使用代理呢&#xff1f; 判断依据不是技术层面&#xff0c;而是你的生产环境。 首先要关注的是生产环境里面到底是一种什么样的情况&#xff0c;到底有没有跨域&#xff0c;然后根据生产环境的情况&a…...

接口测试(jmeter和postman 接口使用)

接口测试基础知识 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。把前端&#xff08;client&#xff09;和后端&#xff08;server&#xff09;联系起来&#xff0c;测试的重点是要检查数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及系…...

doc与docx文档转html,格式样式不变(包含图片转换)

最近做一个富文本的需求&#xff0c;要求把文档内容转换到富文本内&#xff0c;文档中的格式也好&#xff0c;样式也好&#xff0c;图片啥的都要一致展示&#xff1b;踩了不少坑&#xff0c;据说word文档其实是一个压缩包&#xff0c;我不是特别清楚但是也能理解&#xff0c;自…...

CSS页面基本布局

前提回顾 1. 超文本标记语言&#xff08;HTML&#xff09;是一种标记语言&#xff0c;用来结构化我们的网页内容并赋予内容含义&#xff1b; &#xff08;超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language /ˈhaɪpətekst ˈmɑːkʌp ˈlŋɡwɪdʒ /…...

SQL查询命令互转vba格式

最近搞个Excel的vba查询数据库&#xff0c;发现vba有代码行长度限制需要转换下就弄了这个&#xff0c;布局和功能暂且这样了&#xff0c;哪位大佬如果有兴趣的可以再美化下&#xff01; 这次更新了SQL命令互转VBA格式&#xff0c; SQL原始格式要分行的不能一坨贴进去&#xff0…...

android 指针动画转动

记录一种简单动画 效果图&#xff1a; 都是直接使用图片资源FrameLayout布局实现&#xff0c;布局如下&#xff1a; <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"…...

力扣第51题 N 皇后 c++ 难~ 回溯题

题目 51. N 皇后 困难 相关标签 数组 回溯 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...