0

0

机器学习基础之数字上的距离:点在空间中的距离

WBOY

WBOY

发布时间:2023-04-11 23:40:15

|

2370人浏览过

|

来源于51CTO.COM

转载

 本文转载自微信公众号「活在信息时代」,作者活在信息时代。转载本文请联系活在信息时代公众号。

在机器学习中,一个基础的概念就是如何判断两个样本之间的差异,从而能够评价两个样本之间的相似性和类别等信息。而判断这种相似性的度量就是两个样本在特征空间内的距离。

根据数据特征的不同,度量方法有很多种。一般而言,对两个数据样本x,y,定义一个函数d(x,y),如果定义其为两个样本之间的距离,那么d(x,y)则需要满足以下几条基本性质:

  • 非负性:d(x,y)>=0
  • 同一性:d(x,y)=0 ⇔ x=y
  • 对称性:d(x,y)= d(y,x)
  • 三角不等式:d(x,y)

通常来讲,常见的距离度量包括:点在空间中的距离、字符串间的距离、集合的相似度、变量/概念分布间的距离四种。

今天我们首先来介绍一下最为常用的点在空间中的距离。

点在空间中的距离包括以下几种:

1、欧几里得距离(Ecllidean Distance)

毫无疑问,欧氏距离是人们最熟悉的距离,它即是两点之间的直线距离。学过初中数学的同学都知道在笛卡尔坐标系中如何计算二维空间两个点之间的距离

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

机器学习基础之数字上的距离:点在空间中的距离

其计算公式为:

机器学习基础之数字上的距离:点在空间中的距离

推广到N维空间的欧氏距离即为:

机器学习基础之数字上的距离:点在空间中的距离

2、曼哈顿距离(Manhattan Distance)

曼哈顿距离又称为出租车距离,其概念来源于纽约曼哈顿区这样有很多横平竖直的街区,在这种街区中,出租车司机如果想从一个点走到另一个点的话,计算直线距离是没有用的,因为出租车不可能从建筑物上飞过去。因此,这种距离通常是将两个点的东西向、南北向距离分别相减再相加,这也就是出租车实际要经过的距离。

机器学习基础之数字上的距离:点在空间中的距离

如图所示,红线和黄线就是两种不同路径的曼哈顿距离。数学上,二维空间的曼哈顿距离计算方法如下:

机器学习基础之数字上的距离:点在空间中的距离

3、切比雪夫距离(Chebyshev Distance)

切比雪夫距离定义为两个点之间各坐标数值差的最大值。


其最直观的例子即是国际象棋中的国王,因为它可以横走直走斜走,但是每次都只能走一格,所以切比雪夫距离就是他要走到另一个格子所需要的最小距离。

机器学习基础之数字上的距离:点在空间中的距离

4、闵可夫斯基距离(Minkowski Distance)

闵氏距离本身不是一个特别的距离,而是将多个距离(曼哈顿距离、欧氏距离、切比雪夫距离)合并成为的一个公式。

其定义为,对于两个n维变量,闵氏距离为:

机器学习基础之数字上的距离:点在空间中的距离

当p=1时,可以看到

机器学习基础之数字上的距离:点在空间中的距离

此时为曼哈顿距离。

当p=2时,可以看到

机器学习基础之数字上的距离:点在空间中的距离

此时即为欧氏距离。

当p=∞时,可以看到

机器学习基础之数字上的距离:点在空间中的距离

此时即为切比雪夫距离。

5、标准化的欧几里得距离(Standardized Euclidean Distance)

欧氏距离可以测量两个点之间的直线距离,但是在某些情况下,可能会受到单位不同的影响。例如同时是差5,差5毫米的身高和差5公斤的体重,观感可能是完全不同的。如果我们想对三个模特进行聚类,她们各自的属性如下:

A:65000000毫克(即65公斤),1.74米

B:60000000毫克(即60公斤),1.70米

C:65000000毫克(即65公斤),1.40米

按我们正常的理解,A和B是身材比较好的模特,应该归到一类。但是以上述单位实际计算的时候,却发现A和B的差异大于A和C之间的差异。原因在于属性计量单位的不同导致数值差异过大。同样的数据如果换个单位。

A:65千克,174厘米

B:60千克,170厘米

C:65千克,140厘米

那么就会得到我们想到的结果,将A和B归为一类了。因此,为避免出现这种由于计量单位的不同而出现的差异,我们就需要引入标准化欧氏距离。在这种距离计算中,会将各个分量都标准化到均值、方差相等的区间。

假设样本集X的均值(mean)为m,标准差(standard deviation)为s,那么X的“标准化变量”表示为:

机器学习基础之数字上的距离:点在空间中的距离

其中,标准化后的值 = ( 标准化前的值 - 分量的均值 ) /分量的标准差。经过简单的推导就可以得到两个n维向量间的标准化欧氏距离公式为:

机器学习基础之数字上的距离:点在空间中的距离

如果将方差的倒数看成是一个权重,这个公式可以看成是一种加权欧氏距离(Weighted Euclidean distance)。通过这种操作,我们就有效的消除了不同计重单位之间的差异。

6、兰氏距离(Lance and Willianms Distance)

兰氏距离又称为堪培拉距离,

机器学习基础之数字上的距离:点在空间中的距离

它是一个无量纲的指标,克服了闵氏距离与各指标的量纲有关的缺点,并且对于较大的奇异值不敏感,特别适合调度偏倚的数据。但是这种距离也没有考虑到变量间的相关性。所以如果需要考虑变量之间的相关性的话,还是需要马氏距离。

7、马氏距离(Mahalanobis Distance)

对数值进行标准化之后,就一定不会出问题吗?也不一定。例如在一个一维的例子中,如果有两个类,一个类均值为0,方差为0.1,而另一个类均值为5,方差为5。那么如果一个值为2的点应该属于哪一类呢?我们直觉上认为它肯定是第二类,因为第一类显然不太可能在数值上达到2。但是实际上从距离上计算的话2这个数就得属于第一类。

所以,在一个方差较小的维度下,很小的差别就可能成为离群点。例如说下图,A与B相对于原点的距离是相同的,但是由于样本整体沿着横轴分布,所以B点更有可能是样本中的点,而A点则更有可能是离群点。

机器学习基础之数字上的距离:点在空间中的距离

而在维度间不独立同分布的情况下,也会出现问题,例如说下图中的A点与B点到原点的距离相等,但是主要分布类似于f(x)=x,所以A更像是一个离群点。

机器学习基础之数字上的距离:点在空间中的距离

因此,我们可以看到,在这种情况下,标准化的欧氏距离也会有问题,所以我们需要引入马氏距离。

马氏距离将变量按照主成分进行旋转,让维度间相互独立,然后再进行标准化,让维度同分布。而主成分即为特征向量方向,所以只需要按照特征向量的方向进行旋转,然后缩放特征值倍就可以了。例如上图变换之后会得到下面的结果:

机器学习基础之数字上的距离:点在空间中的距离

可以看出离群点被成功分离了。

马氏距离是由印度数学家马哈拉诺比斯提出的,表示数据的协方差距离。它是一种有效地计算两个未知样本集的相似度的方法。

对于一个均值为

机器学习基础之数字上的距离:点在空间中的距离

,协方差矩阵为Σ的多变量矢量

机器学习基础之数字上的距离:点在空间中的距离

,其马氏距离(单个数据点的马氏距离)为:

机器学习基础之数字上的距离:点在空间中的距离

对于两个服从同一分布并且其协方差矩阵为Σ的随机变量X与Y的差异程度,数据点x, y之间的马氏距离为:

机器学习基础之数字上的距离:点在空间中的距离

如果协方差矩阵为单位矩阵,那么马氏距离就简化成了欧氏距离。如果协方差矩阵为对角阵,那么马氏距离就变成了标准化的欧氏距离。

8、余弦距离(Cosine Distance)

顾名思义,余弦距离来源于几何中的夹角余弦,它可用来衡量两个向量方向的差异,而非距离或长度上。当余弦值为0时,两向量正交,夹角为90度。夹角越小,余弦值越接近于1,方向更趋同。

在N维空间中,余弦距离为:


值得指出的是,余弦距离不满足三角不等式。

9、测地距离(Geodesic Distance)

测地距离最初是指球体表面之间的最短距离。当特征空间为平面时,测地距离即为欧氏距离。在非欧几何中,球面上两点间距离最短的线是连接这两点的大圆弧,在球面上的三角形、多边形的边也是由这些大圆弧组成的。

机器学习基础之数字上的距离:点在空间中的距离

10、布雷柯蒂斯距离(Bray Curtis Distance)

布雷柯蒂斯距离主要用于植物学、生态学和环境科学,它可以用来计算样本之间的差异。其公式为:

机器学习基础之数字上的距离:点在空间中的距离

其取值在[0, 1]之间,如果两个向量坐标都为0的话,那么值就无意义。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚学堂Mahout视频教程
尚学堂Mahout视频教程

共18课时 | 3.3万人学习

PHP开发基础之类与对象篇
PHP开发基础之类与对象篇

共13课时 | 2.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号