[TOC]
机器学习中的距离
机器学习任务中,常用的距离公式有以下几种:
- 欧式距离(又称欧几里得距离)
- 曼哈顿距离(又称城市街区距离)
- 切比雪夫距离
- 闵氏距离(又称闵可夫斯基距离)
- 标准化欧式距离
- 余弦距离
(一)欧式距离
公式:
\[
d = \sqrt{(a-b)^T(a-b)}
\]
其中 \(a, b\) 为两个 \(n\) 维向量;
理解:
欧式距离在二维空间中代表某个点到另一个点的直线距离。扩展到 \(n\) 维空间,指两个点在 \(n\) 维空间中的真实距离。
局限:
- 假如两个点分别为 A(1, 1000), B(3, 60),则第二个维度对距离 \(d\) 的计算有更大的贡献。这说明我们只是对向量中各元素分别进行了处理,但并未考虑维度之间的关系,以及不同维度对距离的贡献程度。
- 这种方法认为两点之间始终可以通过直线距离到达,因此更适用于欧式空间。
(二)曼哈顿距离
公式:
\[
d = \sum_{k=1}^n|a_k - b_k|
\]
理解:
前面提到,欧式距离有一局限,即认为两点之间始终可以通过直线距离到达。但是现实世界中,从原点到目标点并不都能通过直线到达,因此引入曼哈顿距离。曼哈顿距离考虑了更多的实际因素,在曼哈顿世界中,我们只能沿着线画出的格子行进。
局限:
与欧式距离相似,认为各个维度对距离 \(d\) 的贡献是一样的,即各个维度权重相同。解决方法:很多维度可以通过预处理转化成曼哈顿距离,而在预处理阶段可以解决贡献权重问题。
(三)切比雪夫距离
公式:
\[
d = \max_{k}|a_k-b_k| \\]
另一种形式:
\[
d = \lim_{p\rightarrow \infin} \left(\sum_{k=1}^{n} |a_k-b_k|^p\right)^{\frac{1}{p}}
\]
理解:
欧氏距离只能直线走,曼哈顿距离只能沿着划定的格子边缘走,而切比雪夫中说的距离则是两者的结合体(即可直线走,也可沿着格子走)。
两个点之间的距离定义为:各坐标数值差的绝对值的最大值。此距离中,加入了优化的成分,通过最值来定义距离。
以国际象棋为例,国王走一步能够移动到相邻的8个方格中的任意一个,那么国王从格子 \((x_1,y_1)\) 走到格子 \((x_2,y_2)\) 最少需要多少步?自己走走试试。你会发现最少步数总是 \(\max( | x_2-x_1 | , | y_2-y_1 | )\) 步 。
在上面的距离中可以看出该距离计算适用的场景。像曼哈顿距离一样,需要将空间划分成网格,然后以网格为单位来进行度量。但此距离中,允许你走8个方向。而曼哈顿距离中,只允许你走4个方向。
(四)闵氏距离
公式:
\[
d = \left(\sum_{k=1}^{n}|a_k-b_k|^p\right)^{\frac{1}{p}}
\]
理解:
闵氏距离不是一种距离,而是一组距离。\(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)(也就是“单位”)同等看待,这是不可取的
- 没有考虑各个分量的分布(期望,方差等)可能是不同的
(五)标准化欧氏距离
公式:
\[
d = \sqrt{\sum_{k=1}^n \left( \frac{a_k-b_k}{\delta_k} \right)^2}
\]
其中 \(\delta_k\) 是第 \(k\) 维的标准差。
理解:
由于向量各维分量的分布不一致,所以先将各维度分量标准化到 均值、方差 相同(均值为 0,方差为 1),再计算欧式距离,则避免了欧式距离的“量纲”局限。换种角度看,如果将 \({1}/{{\delta_k}^2}\) 看作权重,则这个公式可看作是加权欧式距离。
(六)余弦距离
原文地址:https://www.cnblogs.com/xxxxxxxxx/p/11657807.html