【机器学习】距离公式分析
机器学习中的距离
机器学习任务中,常用的距离公式有以下几种:
- 欧式距离(又称欧几里得距离)
- 曼哈顿距离(又称城市街区距离)
- 切比雪夫距离
- 闵氏距离(又称闵可夫斯基距离)
- 标准化欧式距离
- 余弦距离
(一)欧式距离
公式:
其中 a,b 为两个 n 维向量;
理解:
欧式距离在二维空间中代表某个点到另一个点的直线距离。扩展到 n 维空间,指两个点在 n 维空间中的真实距离。
局限:
- 假如两个点分别为 A(1, 1000), B(3, 60),则第二个维度对距离 d 的计算有更大的贡献。这说明我们只是对向量中各元素分别进行了处理,但并未考虑维度之间的关系,以及不同维度对距离的贡献程度。
- 这种方法认为两点之间始终可以通过直线距离到达,因此更适用于欧式空间。
(二)曼哈顿距离
公式:
理解:
前面提到,欧式距离有一局限,即认为两点之间始终可以通过直线距离到达。但是现实世界中,从原点到目标点并不都能通过直线到达,因此引入曼哈顿距离。曼哈顿距离考虑了更多的实际因素,在曼哈顿世界中,我们只能沿着线画出的格子行进。
局限:
与欧式距离相似,认为各个维度对距离 d 的贡献是一样的,即各个维度权重相同。解决方法:很多维度可以通过预处理转化成曼哈顿距离,而在预处理阶段可以解决贡献权重问题。
(三)切比雪夫距离
公式:
另一种形式:
理解:
欧氏距离只能直线走,曼哈顿距离只能沿着划定的格子边缘走,而切比雪夫中说的距离则是两者的结合体(即可直线走,也可沿着格子走)。
两个点之间的距离定义为:各坐标数值差的绝对值的最大值。此距离中,加入了优化的成分,通过最值来定义距离。
以国际象棋为例,国王走一步能够移动到相邻的8个方格中的任意一个,那么国王从格子 (x_1,y_1) 走到格子 (x_2,y_2) 最少需要多少步?自己走走试试。你会发现最少步数总是 \max( | x_2-x_1 | , | y_2-y_1 | ) 步 。
在上面的距离中可以看出该距离计算适用的场景。像曼哈顿距离一样,需要将空间划分成网格,然后以网格为单位来进行度量。但此距离中,允许你走8个方向。而曼哈顿距离中,只允许你走4个方向。
(四)闵氏距离
公式:
理解:
闵氏距离不是一种距离,而是一组距离。p=1 时就是曼哈顿距离,p=2 时就是欧式距离,p \rightarrow \infin 时就是切比雪夫距离。因此根据不同的参数 p ,闵氏距离可以表示多种距离。
局限:
举个例子:二维样本(身高,体重),其中身高范围是150190,体重范围是5060,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?因此用闵氏距离来衡量这些样本间的相似度很有问题。简单来说,闵氏距离主要有两个缺点:
- 将各个分量的量纲(scale)(也就是“单位”)同等看待,这是不可取的
- 没有考虑各个分量的分布(期望,方差等)可能是不同的
(五)标准化欧氏距离
公式:
其中 \delta_k 是第 k 维的标准差。
理解:
由于向量各维分量的分布不一致,所以先将各维度分量标准化到 均值、方差 相同(均值为 0,方差为 1),再计算欧式距离,则避免了欧式距离的“量纲”局限。换种角度看,如果将 {1}/{{\delta_k}^2} 看作权重,则这个公式可看作是加权欧式距离。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 数据库服务器 SQL Server 版本升级公告
· C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)
· 程序员常用高效实用工具推荐,办公效率提升利器!