机器学习算法 原理、实现与实践 —— 距离的度量

声明:本篇文章内容大部分转载于July于CSDN的文章:从K近邻算法、距离度量谈到KD树、SIFT+BBF算法,对内容格式与公式进行了重新整理。同时,文章中会有一些对知识点的个人理解和归纳补充,不代表原文章作者的意图。

1. 欧氏距离

欧氏距离是最常见的两点之间或多点之间的距离表示法,又称之为欧几里得度量,它定义于欧几里得空间中,如点 $x = (x_1,\cdots,x_n)$ 和$y = (y_2,\cdots,y_n)$之间的距离为:

$$d(x,y) = \sqrt{(x_1 – y_1)^2 + (x_2-y_2)^2 + \cdots+(x_n-y_n)^2} = \sqrt{\sum_{i=1}^n(x_i-y_i)^2}$$

1)二维平面上两点$a(x_1,y_1)$与$b(x_2,y_2)$间的欧氏距离: $$d = \sqrt{(x_1 – x_2)^2 + (y_1 – y_2)^2}$$

2)三维空间两点$a(x_1,y_1,z_1)$与$b(x_2,y_2,z_2)$间的欧氏距离: $$d = \sqrt{(x_1 – x_2)^2 + (y_1 – y_2)^2 + (z_1 – z_2)^2}$$

3)两个$n$维向量$a(x_{11},x_{12},\cdots,x_{1n})$与 $b(x_{21},x_{22},\cdots,x_{2n})$间的欧氏距离: $$d = \sqrt{\sum_{k=1}^n(x_{1k} – x_{2k})^2}$$ 也可以用表示成向量运算的形式: $$d = \sqrt{(a-b)(a-b)^T}$$

$n$维平面上两点欧式距离,代码可以如下编写:

//unixfy:计算欧氏距离
double euclideanDistance(const vector<double>& v1, const vector<double>& v2)
{
assert(v1.size() == v2.size());
double ret = 0.0;
for (vector<double>::size_type i = ; i != v1.size(); ++i)
{
ret += (v1[i] - v2[i]) * (v1[i] - v2[i]);
}
return sqrt(ret);
}

2. 曼哈顿距离

我们可以定义曼哈顿距离的正式意义为$L_1$-距离或城市区块距离,也就是在欧几里得空间的固定直角坐标系上两点所形成的线段对轴产生的投影的距离总和。

例如在平面上,坐标$(x_1,y_1)$的点$P_1$与坐标$(x_2,y_2)$的点$P_2$的曼哈顿距离为:

$$D(P_1,P_2) = |x_1-x_2| + |y_1 – y_2|$$

要注意的是,曼哈顿距离依赖座标系统的转度,而非系统在座标轴上的平移或映射。

通俗来讲,想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。而实际驾驶距离就是这个“曼哈顿距离”,此即曼哈顿距离名称的来源, 同时,曼哈顿距离也称为城市街区距离(City Block distance)。

1)二维平面两点$a(x_1,y_1)$与$b(x_2,y_2)$间的曼哈顿距离$$d(a,b) = |x_1 – x_2| + |y_1- y_2|$$

2)两个$n$维向量$a(x_{11},x_{12},\cdots,x_{1n})$与$b(x_{21},x_{22},\cdots,x_{2n})$间的曼哈顿距离$$d(a,b) = \sum_{k=1}^n|x_{1k} – x_{2k}|$$

3. 切比雪夫距离

若二个向量或二个点$p,q$,其座标分别为$(p_1,p_2,\cdots,p_i,\cdots)$及$(q_1,q_2,\cdots,q_i,\cdots)$,则两者之间的切比雪夫距离定义如下:

$$D_{Chebyshev}(p,q) = \max_{i}(|p_i – q_i|)$$

这也等于以下$L_p$度量的极值:$\lim_{k\to \infty}\left(\sum_{i=1}^n|p_i – q_i|^k\right)^{1/k}$,因此切比雪夫距离也称为$L_{\infty}$度量。以数学的观点来看,切比雪夫距离是由一致范数(或称为上确界范数)所衍生的度量,也是超凸度量的一种。

1)在平面几何中,若二点$p$及$q$的直角坐标系坐标为$(x_1,y_1)$及$(x_2,y_2)$,则切比雪夫距离为:$D_{Chess} = \max(|x_2 – x_1|,|y_2-y_1|)$。

玩过国际象棋的朋友或许知道,国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子$(x_1,y_1)$走到格子$(x_2,y_2)$最少需要多少步?。你会发现最少步数总是$\max(|x_2 – x_1|,|y_2-y_1|)$步 。

2)二维平面上两点$a(x_1,y_1)$与$b(x_2,y_2)$间的切比雪夫距离$$d(a,b) = \max(|x_1-x_2|,|y_1 – y_2|)$$

3)两个$n$维向量$a(x_{11},x_{12},\cdots,x_{1n})$与 $b(x_{21},x_{22},\cdots,x_{2n})$间的切比雪夫距离$$d(a,b) = \max_{i}(|x_{1i} – x_{2i}|)$$这个公式的另一种等价形式是$$d(a,b) = \lim_{k\to\infty}\left(\sum_{i=1}^n|x_{1i} – x_{2i}|^k\right)^{1/k}$$

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

闵氏距离不是一种距离,而是一组距离的定义。

两个$n$维向量$a(x_{11},x_{12},\cdots,x_{1n})$与 $b(x_{21},x_{22},\cdots,x_{2n})$间的闵可夫斯基距离定义为:

$$d(a,b) =\sqrt[p]{\sum_{k=1}^n|x_{1k} – x_{2k}|^p} $$

其中$p$是一个变参数。

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

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

当$p \to \infty$时,就是切比雪夫距离;

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

5. 标准化欧氏距离 (Standardized Euclidean distance )

标准化欧氏距离是针对简单欧氏距离的缺点而作的一种改进方案。标准欧氏距离的思路:既然数据各维分量的分布不一样,那先将各个分量都“标准化”到均值、方差相等。

假设样本集$X$的数学期望或均值为$\mu$,标准差为$\sigma$,那么$X$的“标准化变量”$\hat{X}$表示为:$(X-\mu)/\sigma$,而且标准化变量的数学期望为0,方差为1。

即,样本集的标准化过程(standardization)用公式描述就是:

$$\hat{X} = \frac{X - \mu}{\sigma}$$

经过简单的推导就可以得到两个$n$维向量$a(x_{11},x_{12},\cdots,x_{1n})$与 $b(x_{21},x_{22},\cdots,x_{2n})$间的标准化欧氏距离的公式:

$$d(a,b) = \sqrt{\sum_{k=1}^n\left(\frac{x_{1k} – x_{2k}}{\sigma_k}\right)^2}$$

如果将方差的倒数看成是一个权重,这个公式可以看成是一种加权欧氏距离(Weighted Euclidean distance)。

6. 马氏距离(Mahalanobis Distance)

有$M$个样本向量$X_1 \sim X_M$,协方差矩阵记为$S$,均值记为向量$\mu$,则其中样本向量$X$到$\mu$的马氏距离表示为:

$$D(X) = \sqrt{(X-\mu)^TS^{-1}(X-\mu)}$$

而其中向量$X_i$与$X_j$之间的马氏距离定义为:

$$D(X_i,X_j) = \sqrt{(X_i – X_j)^TS^{-1}(X_i – X_j)}$$

若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则公式就成了:

$$D(X_i,X_j) = \sqrt{(X_i – X_j)^T(X_i – X_j)}$$

也就是欧氏距离了。

若协方差矩阵是对角矩阵,公式变成了标准化欧氏距离。
马氏距离的优缺点:量纲无关,排除变量之间的相关性的干扰。

7. 巴氏距离(Bhattacharyya Distance)

在统计中,Bhattacharyya距离测量两个离散或连续概率分布的相似性。它与衡量两个统计样品或种群之间的重叠量的Bhattacharyya系数密切相关。Bhattacharyya距离和Bhattacharyya系数以20世纪30年代曾在印度统计研究所工作的一个统计学家A. Bhattacharya命名。同时,Bhattacharyya系数可以被用来确定两个样本被认为相对接近的,它是用来测量中的类分类的可分离性。

对于离散概率分布$p$和$q$在同一域$X$,它被定义为:

$$D_B(p,q) = –ln(BC(p,q))$$

其中:

$$BC(p,q) = \sum_{x\in X}\sqrt{p(x)q(x)}$$

是Bhattacharyya系数。

对于连续概率分布,Bhattacharyya系数被定义为:

$$BC(p,q) = \int\sqrt{p(x)q(x)}dx$$

Bhattacharyya系数是两个统计样本之间的重叠量的近似测量,可以被用于确定被考虑的两个样本的相对接近。

计算Bhattacharyya系数涉及集成的基本形式的两个样本的重叠的时间间隔的值的两个样本被分裂成一个选定的分区数,并且在每个分区中的每个样品的成员的数量,在下面的公式中使用

$$\text{Bhattacharyya} = \sum_{i=1}^n\sqrt{(\sum a_i \cdot \sum b_i)}$$

考虑样品$a$和$b$ ,$n$是的分区数,$\sum a_i$是指样品$a$中落在分区$i$内的个数,$\sum b_i$有类似的定义。

8. 汉明距离(Hamming distance),

两个等长字符串$s_1$与$s_2$之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数。

例如字符串“1111”与“1001”之间的汉明距离为2。

应用:信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)。

9. 夹角余弦(Cosine)

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

(1)在二维空间中向量$A(x_1,y_1)$与向量$B(x_2,y_2)$的夹角余弦公式:

$$cos\theta = \frac{x_1x_2+ y_1y_2}{\sqrt{x_1^2+y_1^2}\sqrt{x_2^2+y_2^2}}$$

(2) 两个$n$维向量$a(x_{11},x_{12},\cdots,x_{1n})$与 $b(x_{21},x_{22},\cdots,x_{2n})$的夹角余弦

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

类似的,对于两个n维样本点$a(x_{11},x_{12},\cdots,x_{1n})$与 $b(x_{21},x_{22},\cdots,x_{2n})$,可以使用类似于夹角余弦的概念来衡量它们间的相似程度,即:

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

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

10. 杰卡德相似系数(Jaccard similarity coefficient)

10.1 杰卡德相似系数

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

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

杰卡德相似系数是衡量两个集合的相似度一种指标。

10.2 杰卡德距离

与杰卡德相似系数相反的概念是杰卡德距离(Jaccard distance)。

杰卡德距离可用如下公式表示:

杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。

10.3 杰卡德相似系数与杰卡德距离的应用

可将杰卡德相似系数用在衡量样本的相似度上。

举例:样本A与样本B是两个n维向量,而且所有维度的取值都是0或1,例如:A(0111)和B(1011)。我们将样本看成是一个集合,1表示集合包含该元素,0表示集合不包含该元素。

M11 :样本A与B都是1的维度的个数

M01:样本A是0,样本B是1的维度的个数

M10:样本A是1,样本B是0 的维度的个数

M00:样本A与B都是0的维度的个数

依据上文给的杰卡德相似系数及杰卡德距离的相关定义,样本A与B的杰卡德相似系数J可以表示为:

这里M11+M01+M10可理解为A与B的并集的元素个数,而M11是A与B的交集的元素个数。而样本A与B的杰卡德距离表示为J':

11.皮尔逊系数(Pearson Correlation Coefficient)

在具体阐述皮尔逊相关系数之前,有必要解释下什么是相关系数 ( Correlation coefficient )与相关距离(Correlation distance)。

相关系数 ( Correlation coefficient )的定义是:

(其中,E为数学期望或均值,D为方差,D开根号为标准差,E{ [X-E(X)] [Y-E(Y)]}称为随机变量X与Y的协方差,记为Cov(X,Y),即Cov(X,Y) = E{ [X-E(X)] [Y-E(Y)]},而两个变量之间的协方差和标准差的商则称为随机变量X与Y的相关系数,记为)

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

具体的,如果有两个变量:X、Y,最终计算出的相关系数的含义可以有如下理解:

当相关系数为0时,X和Y两变量无关系。

当X的值增大(减小),Y值增大(减小),两个变量为正相关,相关系数在0.00与1.00之间。

当X的值增大(减小),Y值减小(增大),两个变量为负相关,相关系数在-1.00与0.00之间。

相关距离的定义是:

OK,接下来,咱们来重点了解下皮尔逊相关系数。

在统计学中,皮尔逊积矩相关系数(英语:Pearson product-moment correlation coefficient,又称作 PPMCC或PCCs, 用r表示)用于度量两个变量X和Y之间的相关(线性相关),其值介于-1与1之间。

通常情况下通过以下取值范围判断变量的相关强度:

相关系数     0.8-1.0     极强相关

0.6-0.8     强相关

0.4-0.6     中等程度相关

0.2-0.4     弱相关

0.0-0.2     极弱相关或无相关

在自然科学领域中,该系数广泛用于度量两个变量之间的相关程度。它是由卡尔·皮尔逊从弗朗西斯·高尔顿在19世纪80年代提出的一个相似却又稍有不同的想法演变而来的。这个相关系数也称作“皮尔森相关系数r”。

(1)皮尔逊系数的定义:

两个变量之间的皮尔逊相关系数定义为两个变量之间的协方差和标准差的商:

以上方程定义了总体相关系数, 一般表示成希腊字母ρ(rho)。基于样本对协方差和方差进行估计,可以得到样本标准差, 一般表示成r:

一种等价表达式的是表示成标准分的均值。基于(Xi, Yi)的样本点,样本皮尔逊系数是

其中,分别是标准分、样本平均值和样本标准差。

或许上面的讲解令你头脑混乱不堪,没关系,我换一种方式讲解,如下:

假设有两个变量X、Y,那么两变量间的皮尔逊相关系数可通过以下公式计算:

公式一:

注:勿忘了上面说过,“皮尔逊相关系数定义为两个变量之间的协方差和标准差的商”,其中标准差的计算公式为:

公式二:

公式三:

公式四:

以上列出的四个公式等价,其中E是数学期望,cov表示协方差,N表示变量取值的个数。

(2)皮尔逊相关系数的适用范围

当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:

两个变量之间是线性关系,都是连续数据。

两个变量的总体是正态分布,或接近正态的单峰分布。

两个变量的观测值是成对的,每对观测值之间相互独立。

(3)如何理解皮尔逊相关系数

rubyist:皮尔逊相关系数理解有两个角度

其一, 按照高中数学水平来理解, 它很简单, 可以看做将两组数据首先做Z分数处理之后, 然后两组数据的乘积和除以样本数,Z分数一般代表正态分布中, 数据偏离中心点的距离.等于变量减掉平均数再除以标准差.(就是高考的标准分类似的处理)

样本标准差则等于变量减掉平均数的平方和,再除以样本数,最后再开方,也就是说,方差开方即为标准差,样本标准差计算公式为:

所以, 根据这个最朴素的理解,我们可以将公式依次精简为:

其二, 按照大学的线性数学水平来理解, 它比较复杂一点,可以看做是两组数据的向量夹角的余弦。下面是关于此皮尔逊系数的几何学的解释,先来看一幅图,如下所示:

回归直线: y=gx(x) [红色] 和 x=gy(y) [蓝色]

如上图,对于没有中心化的数据, 相关系数与两条可能的回归线y=gx(x) 和 x=gy(y) 夹角的余弦值一致。

对于没有中心化的数据 (也就是说, 数据移动一个样本平均值以使其均值为0), 相关系数也可以被视作由两个随机变量 向量 夹角 的 余弦值(见下方)。

举个例子,例如,有5个国家的国民生产总值分别为 10, 20, 30, 50 和 80 亿美元。 假设这5个国家 (顺序相同) 的贫困百分比分别为 11%, 12%, 13%, 15%, and 18% 。 令 x 和 y 分别为包含上述5个数据的向量: x = (1, 2, 3, 5, 8) 和 y = (0.11, 0.12, 0.13, 0.15, 0.18)。

利用通常的方法计算两个向量之间的夹角  (参见 数量积), 未中心化 的相关系数是:

我们发现以上的数据特意选定为完全相关: y = 0.10 + 0.01 x。 于是,皮尔逊相关系数应该等于1。将数据中心化 (通过E(x) = 3.8移动 x 和通过 E(y) = 0.138 移动 y ) 得到 x = (−2.8, −1.8, −0.8, 1.2, 4.2) 和 y = (−0.028, −0.018, −0.008, 0.012, 0.042), 从中

(4)皮尔逊相关的约束条件

从以上解释, 也可以理解皮尔逊相关的约束条件:

1 两个变量间有线性关系

2 变量是连续变量

3 变量均符合正态分布,且二元分布也符合正态分布

4 两变量独立

在实践统计中,一般只输出两个系数,一个是相关系数,也就是计算出来的相关系数大小,在-1到1之间;另一个是独立样本检验系数,用来检验样本一致性。

简单说来,各种“距离”的应用场景简单概括为,空间:欧氏距离,路径:曼哈顿距离,国际象棋国王:切比雪夫距离,以上三种的统一形式:闵可夫斯基距离,加权:标准化欧氏距离,排除量纲和依存:马氏距离,向量差距:夹角余弦,编码差别:汉明距离,集合近似度:杰卡德类似系数与距离,相关:相关系数与相关距离。

ML 07、机器学习中的距离度量的更多相关文章

  1. 再谈机器学习中的归一化方法(Normalization Method)

    机器学习.数据挖掘工作中,数据前期准备.数据预处理过程.特征提取等几个步骤几乎要花费数据工程师一半的工作时间.同时,数据预处理的效果也直接影响了后续模型能否有效的工作.然而,目前的大部分学术研究主要集 ...

  2. 机器学习中应用到的各种距离介绍(附上Matlab代码)

    转载于博客:各种距离 在做分类时常常需要估算不同样本之间的相似性度量(SimilarityMeasurement),这时通常采用的方法就是计算样本间的"距离"(Distance). ...

  3. 【Matlab开发】matlab中bar绘图设置与各种距离度量

    [Matlab开发]matlab中bar绘图设置与各种距离度量 标签(空格分隔): [Matlab开发] [机器学习] 声明:引用请注明出处http://blog.csdn.net/lg1259156 ...

  4. 机器学习中常用的距离及其python实现

    1 概述 两个向量之间的距离(此时向量作为n维坐标系中的点)计算,在数学上称为向量的距离(Distance),也称为样本之间的相似性度量(Similarity Measurement).它反映为某类事 ...

  5. 机器学习中的相似性度量(Similarity Measurement)

    机器学习中的相似性度量(Similarity Measurement) 在做分类时常常需要估算不同样本之间的相似性度量(Similarity Measurement),这时通常采用的方法就是计算样本间 ...

  6. [转] MachingLearning中的距离相似性计算以及python实现

    参考:https://blog.csdn.net/gamer_gyt/article/details/75165842#t16  https://blog.csdn.net/ymlgrss/artic ...

  7. 概率分布之间的距离度量以及python实现

    1. 欧氏距离(Euclidean Distance)       欧氏距离是最易于理解的一种距离计算方法,源自欧氏空间中两点间的距离公式.(1)二维平面上两点a(x1,y1)与b(x2,y2)间的欧 ...

  8. 机器学习中的K-means算法的python实现

    <机器学习实战>kMeans算法(K均值聚类算法) 机器学习中有两类的大问题,一个是分类,一个是聚类.分类是根据一些给定的已知类别标号的样本,训练某种学习机器,使它能够对未知类别的样本进行 ...

  9. 机器学习中模型泛化能力和过拟合现象(overfitting)的矛盾、以及其主要缓解方法正则化技术原理初探

    1. 偏差与方差 - 机器学习算法泛化性能分析 在一个项目中,我们通过设计和训练得到了一个model,该model的泛化可能很好,也可能不尽如人意,其背后的决定因素是什么呢?或者说我们可以从哪些方面去 ...

随机推荐

  1. iOS CoreData relationship 中的inverse

    官方文档建议为每一个可以设置inverse的relationship设置一个inverse.目的是保持数据库的正确性.但是没有具体的说明. 我在stackoverflow中找到了一个是分好的答案,ht ...

  2. VIM常用操作总结

    VIM常用的模式网上说法不太一样,但是大同小异,这里大致分一下,便于后面总结 1.一般模式 默认打开文件后的模式,这个时候只能移动光标,不能编辑 2.输入模式 一般模式按下i,就可以进入输入模式,输入 ...

  3. Windows下配置Java开发环境

    学习Java第一步是配置本地开发环境,学习最基本的桌面开发,下面以win7为例配置Java开发环境,即:JDK+JRE+Eclipse,安装JDK的时候会默认安装JRE,根据提示安装就可以了. 首先去 ...

  4. Apache OFBiz 研究记录01

    作为Apache 的顶级项目: Apache OFBiz,功能十分强大,一般开发者很难用到全部功能. 这次笔者的研究主要集中在电子商务平台这一块,一步一步解构. OFBiz下载地址:http://of ...

  5. java 入门 第二季4

    1. 多态 继承是多态的实现基础 引用的多态 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 方法的多态 创建本类对象时,调用本类方法 2种是调用子类的方法或继承的方法 子类中添加独有的方 ...

  6. nyoj116_士兵杀敌(二)_树状数组

    士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...

  7. sql server 导出表结构

    今天准备整理下手里面几个数据库,形成一个表结构文档,方便以后维护使用. 网上找到一个脚本还不错,小小的修改就满足了我的要求,执行完SQL脚本. 在结果就能看到数据库所有表的结构,这个时候只要全选,然后 ...

  8. SQL TO LINQ(Linqer神器)

    此软件可以把SQL语句转换成LINQ语句 首先把Linqer下载到本地, 1.在VS中创建.dbml文件和.cs文件 打开VS,创建一个控制台项目即可,再添加一个dbml项目 2.添加连接数据库 3. ...

  9. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  10. vector< vector<int> >类似于二维数组

    vector< vector<int> > intVV; vector<int> intV; int i,j; ;i<;++i){ intV.clear(); ...