机器学习中几种距离的度量方法

一、欧氏距离(Euclidean Distance)

欧几里得度量(euclidean metric)(也称欧氏距离)是一个通常采用的距离定义,指在m维空间中两个点之间的真实距离,或者向量的自然长度(即该点到原点的距离)。在二维和三维空间中的欧氏距离就是两点之间的实际距离。

机器学习中几种距离的度量方法_第1张图片

  • 二维平面上点a(x1,y1)与b(x2,y2)间的欧氏距离: 

d_{12} = \sqrt{(x_{1} - x_{2})^2 + (y_{1} - y_{2})^2}

  • 三维空间点a(x1,y1,z1)与b(x2,y2,z2)间的欧氏距离:

d_{12} = \sqrt{(x_{1} - x_{2})^2 + (y_{1} - y_{2})^2 + (z_{1} - z_{2})^2}

  • n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)间的欧氏距离(两个n维向量):

d_{12} = \sqrt{\sum_{k=1}^{n}(x_{1k} - x_{2k})^2}

  • Matlab计算欧氏距离:

Matlab计算距离使用pdist函数。若X是一个m×n的矩阵,则pdist(X)将X矩阵每一行作为一个n维行向量,然后计算这m个向量两两间的距离。

X = [1 1; 2 2; 3 3; 4 4];
d = pdist(X, 'euclidean')
#运行结果
d = 
    1.4142    2.8284    4.2426    1.4142    2.8284    1.4142

二、曼哈顿距离(Manhattan Distance)

曼哈顿距离——两点在南北方向上的距离加上在东西方向上的距离。顾名思义,在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。曼哈顿距离也称为“城市街区距离”(City Block distance)。

  • 二维平面两点a(x1,y1)与b(x2,y2)间的曼哈顿距离:

d_{12} = \left |{x_{1} - x_{2}}\right | + \left |{y_{1} - y_{2}}\right |

  • n维空间点a(x11, x12, ..., x1n) 与b(x21, x22, ... , x2n)的曼哈顿距离:

d_{12} = \sum_{k=1}^{n}\left | x_{1k} - x_{2k} \right |

  • Matlab计算曼哈顿距离:
X = [1 1; 2 2; 3 3; 4 4];
d = pdist(X, 'cityblock')
#运行结果
d =
     2     4     6     2     4     2

三、切比雪夫距离(Chebyshev Disatance) 

切比雪夫距离(Chebyshev distance)或是L∞度量,是向量空间中的一种度量,二个点之间的距离定义是其各坐标数值差绝对值的最大值。以数学的观点来看,切比雪夫距离是由一致范数(uniform norm)(或称为上确界范数)所衍生的度量,也是超凸度量(injective metric space)的一种。

  • 二维平面两点a(x1,y1)与b(x2,y2)间的切比雪夫距离:

d_{12} = max(|x_{1} - x_{2}|, |y_{1} - y_{2}|)

  • n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)的切比雪夫距离:

d_{12} = \underset{i}{max}(|x_{1i} - x_{2i}|)

  • Matlab计算切比雪夫距离:
X = [1 1; 2 2; 3 3; 4 4];
d = pdist(X,'chebychev')

#运行结果
d =
     1     2     3     1     2     1

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

闵氏距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述。

闵氏距离的定义:两个n维变量a(x11, x12, ..., x1n)与b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:d_{12} = \sqrt[p]{\sum_{k=1}^{n}|x_{1k} - x_{2k}| ^ p}

其中p是一个变参数:

                                  当p=1时,就是曼哈顿距离;

                                  当p=2时,就是欧氏距离;

                                  当p→∞时,就是切比雪夫距离。

因此,根据变参数的不同,闵氏距离可以表示某一类/种的距离。

  • Matlab计算闵式距离(以p=2的欧氏距离为例):
X = [1 1; 2 2; 3 3; 4 4];
d = pdist(X, 'minkowski', '2')

#运行结果
d =

    1.0140    2.0279    3.0419    1.0140    2.0279    1.0140

 

五、标准化欧氏距离(Standardized Euclidean Distance) 

定义: 标准化欧氏距离是针对欧氏距离的缺点而作的一种改进。标准欧氏距离的思路:既然数据各维分量的分布不一样,那先将各个分量都“标准化”到均值、方差相等。假设样本集X的均值(mean)为m,标准差(standard deviation)为s,X的“标准化变量”表示为:X^* = \frac{X - m}{s}

  • 标准化欧氏距离公式:

d_{12} = \sqrt{\sum_{k=1}^{n}(\frac{x_{1k} - x_{2k}}{s_{k}})^2}

如果将方差的倒数看成一个权重,也可称之为加权欧氏距离(Weighted Euclidean distance).

  • Matlab计算标准欧氏距离(假设两个分量的标准差为0.5和1)
X = [1 1; 2 2; 3 3; 4 4];
d = pdist(X, 'seuclidean', [0.5, 1])
#运行结果
d =

    2.2361    4.4721    6.7082    2.2361    4.4721    2.2361

 六、马氏距离(Mahalanobis Disttance)

马氏距离的引出:

机器学习中几种距离的度量方法_第2张图片

 上图有两个正态分布的总体,它们的均值分别为a和b,但方差不一样,则图中的A点离哪个总体更近?或者说A有更大的概率属于谁?显然,A离左边的更近,A属于左边总体的概率更大,尽管A与a的欧式距离远一些。这就是马氏距离的直观解释。

  • 概念:马氏距离是基于样本分布的一种距离。物理意义就是在规范化的主成分空间中的欧氏距离。所谓规范化的主成分空间就是利用主成分分析对一些数据进行主成分分解。再对所有主成分分解轴做归一化,形成新的坐标轴。由这些坐标轴张成的空间就是规范化的主成分空间。

机器学习中几种距离的度量方法_第3张图片

  • 定义:有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到μ的马氏距离表示为:

D(x) = \sqrt{(X - \mu )^T S^{-1} (X - \mu )}

 向量Xi与Xj之间的马氏距离定义为:

D(X_{i} , X_{j}) = \sqrt{(X_{i} - X_{j})^TS^{-1}(X_{i} , X_{j})}

若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则Xi与Xj之间的马氏距离等于他们的欧氏距离:

D(X_{i},X_{j}) = \sqrt{(X_{i} - X_{j})^T(X_{i} - X_{j})}

若协方差矩阵是对角矩阵,则就是标准化欧氏距离。

  • 欧氏距离   &   马氏距离:

机器学习中几种距离的度量方法_第4张图片机器学习中几种距离的度量方法_第5张图片

  •  Matlab计算马氏距离:
X = [1 2; 1 3; 3 3; 4 1];
d = pdist(X, 'mahal')
#运行结果
d =

    1.2247    2.4381    2.0000    1.5635    2.3452    2.1473

七、余弦距离(Cosine Distance)

几何中,夹角余弦可用来衡量两个向量方向的差异;机器学习中,借用这一概念来衡量样本向量之间的差异。

  • 二维空间中向量A(x1,y1)与向量B(x2,y2)的夹角余弦公式:

cos\theta = \frac{x_{1}x_{2} + y_{1}y_{2}}{\sqrt{x_{1}^{2} + y_{1}^{2}}\sqrt{x_{2}^{2} + y_{2}^{2}}}

  • 两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦为:

cos(\theta ) = \frac{a \cdot b}{|a| |b|}

即:

cos(\theta ) = \frac{\sum_{n}^{k=1}x_{1k}x_{2k}}{\sqrt{\sum_{n}^{k=1}x_{1k}^2 \sum_{n}^{k=1}x_{2k}^2}}

夹角余弦取值范围为[-1,1]。余弦越大表示两个向量的夹角越小,余弦越小表示两向量的夹角越大。当两个向量的方向重合时余弦取最大值1,当两个向量的方向完全相反余弦取最小值-1。

  • Matlab计算夹角余弦(Matlab中的pdist(X, ‘cosine’)得到的是1减夹角余弦的值):
X = [1 1; 2 2; 3 3; 4 4];
d = 1 -pdist(X, 'cosine')
#运行结果
d =

    1.0000    1.0000    1.0000    1.0000    1.0000    1.0000

八、汉明距离(Hamming Distance) 

  • 定义:两个等长字符串s1与s2的汉明距离为:将其中一个变为另外一个所需要作的最小字符替换次数。
  • 汉明重量:是字符串相对于同样长度的零字符串的汉明距离,也就是说,它是字符串中非零的元素个数:对于二进制字符串来说,就是 1 的个数,所以 11101 的汉明重量是 4。因此,如果向量空间中的元素a和b之间的汉明距离等于它们汉明重量的差a-b。
  • 应用:汉明重量分析在包括信息论、编码理论、密码学等领域都有应用。比如在信息编码过程中,为了增强容错性,应使得编码间的最小汉明距离尽可能大。但是,如果要比较两个不同长度的字符串,不仅要进行替换,而且要进行插入与删除的运算,在这种场合下,通常使用更加复杂的编辑距离等算法。
  • Matlab计算汉明距离(Matlab中2个向量之间的汉明距离的定义为2个向量不同的分量所占的百分比):
X  =  [0 1 1; 1 1 2; 1 5 2];
d = pdist(X, 'hamming')
#运行结果
d =

    0.6667    1.0000    0.3333

九、杰卡德距离(Jaccard Distance) 

杰卡德相似系数(Jaccard similarity coefficient):两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示:

J(A,B) = \frac{|A\cap B|}{|A\cup B|}

  • 杰卡德距离(Jaccard Distance):与杰卡德相似系数相反,用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度:

J_{\delta }(A,B) = 1 - J(A, B) = \frac{|A \cup B| - |A\cap B|}{|A\cup B|}

  • Matlab计算杰卡德距离(Matlab中将杰卡德距离定义为不同的维度的个数占“非全零维度”的比例):
X = [1 1 0; 1 -1 0; -1 1 0];
d =pdist(X, 'jaccard')
#运行结果
d =

    0.5000    0.5000    1.0000

十、相关距离(Correlation Distance) 

 机器学习中几种距离的度量方法_第6张图片

  • 相关系数:是衡量随机变量X与Y相关程度的一种方法,相关系数的取值范围是[-1,1]。相关系数的绝对值越大,则表明X与Y相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关):

\rho _{XY} = \frac{Cov(X,Y)}{\sqrt{D(X)} \sqrt{D(X)}} =\frac{E((X-EX)(Y-EY))}{\sqrt{D(X)} \sqrt{D(X)}}

 

D_{xy} = 1 - \rho _{XY} 

  • 相关距离:
  • Matlab计算相关系数与相关距离:
X = [1 2 3 4; 3 8 7 6];
c = corrcoef(X')    %返回相关系数矩阵
d = pdist(X, 'correlation')    %返回相关距离
#运行结果
c =

    1.0000    0.4781
    0.4781    1.0000


d =

    0.5219

十一、 信息熵(Information Entropy)

 以上的距离度量方法度量的皆为两个样本(向量)之间的距离,而信息熵描述的是整个系统内部样本之间的一个距离,或者称之为系统内样本分布的集中程度(一致程度)、分散程度、混乱程度(不一致程度)。系统内样本分布越分散(或者说分布越平均),信息熵就越大。分布越有序(或者说分布越集中),信息熵就越小。

机器学习中几种距离的度量方法_第7张图片

 计算给定的样本集X的信息熵的公式:

Entropy(X) = \sum_{i=1}^{n}-P_{i}log_{2}P_{i} 

参数的含义:

n:样本集X的分类数

pi:X中第 i 类元素出现的概率

信息熵越大表明样本集S的分布越分散(分布均衡),信息熵越小则表明样本集X的分布越集中(分布不均衡)。当S中n个分类出现的概率一样大时(都是1/n),信息熵取最大值log2(n)。当X只有一个分类时,信息熵取最小值0。

你可能感兴趣的:(机器学习)