距离计算与相似性度量方法

0. 前言

在机器学习和数据挖掘中,我们经常需要知道个体间差异的大小,进而评价个体的相似性和类别。最常见的是数据分析中的相关分析,数据挖掘中的分类和聚类算法,如 K 最近邻(KNN)和K均值(K-Means)等。根据数据特性的不同,可以采用不同的度量方法。

1. 基本性质与名词解释

1.1 基本性质

dist(⋅,⋅)表示“距离度量”(distance measure),一般需满足一些基本性质:

非负性dist(x_i,x_j) \geq 0; \tag{式1.1}同一性dist(x_i,x_j)=0 当且仅当 x_i=x_j; \tag{式1.2}对称性dist(x_i,x_j)=dist(x_j,x_i); \tag{式1.3}直递性dist(x_i,x_j) \leq dist(x_i,x_k)+dist(x_k,x_j); \tag{式1.4}

需要注意的是,通常我们是基于某种形式的距离来定义“相似度度量”(similarity measure),距离越大,相似度越小。然而,用于相似度度量的距离未必一定满足以上所有的性质,尤其是直递性(式1.4)。例如在某些任务中我们可能希望有这样的相似度度量:“人”、“马”分别与“人马”相似,但“人”与“马”很不相似;要达到这个目的,可以令“人”“马”与“人马”之间的距离很小,但“人”与“马”之间的距离很大,如下图所示,此时该距离不满足直递性;这样的距离称为“非度量距离”(non-metric distance)。

1.2 名词解释

  • 属性:即样本本身所具有的特征,样本空间中的维度,就是属性的个数
  • 连续属性:样本的属性在定义域上有无穷多个可能的取值
  • 离散属性:样本的属性在定义域上是有限个取值
  • 有序属性:属性的值能直接用来计算计算距离
  • 无序属性:属性的值不能直接用来计算计算距离

因此所有样本的属性都可划分为有序属性无序属性混合属性(同时具有有序属性和无序属性)。针对于有序属性的样本,我们最常用闵科夫斯基距离计算公式来衡量样本之间的相似度,针对于无序属性的样本我们可采用VDM(Value Diffrence Metric)

2. 距离计算

距离计算公式繁多,为方便理解,此处我们只以最常用的距离计算公式为例,其他常用距离计算公式见第三节。

针对于有序属性的样本,此处我们以闵科夫斯基距离计算公式为例,来衡量样本之间的相似度;
针对于无序属性的样本,我们采用VDM(Value Diffrence Metric),来衡量样本之间的相似度。

注:此处的距离计算式是实现定义好的,但在很多现实任务中,有必要基于数据样本来确定合适的距离计算式,这可通过“距离度量学习”(distance metric learning)来实现。

2.1 有序属性--闵科夫斯基距离(Minkowski distance)

给定样本x_i=(x_{i1};x_{i2};...;x_{in})x_j=(x_{j1};x_{j2};...;x_{jn}),最常用的是闵科夫斯基距离(Minkowski distance)

dist_{mk}(x_i,x_j)=\left(\sum_{u=1}^{n} |x_{iu}-x_{ju}|^p\right)^\frac{1}{p}\tag{式2.1.1}

p\geq1,式2.1明显满足式(1.1)~(1.4)的距离度量基本性质。

p=2时,闵科夫斯基距离即欧式距离(Euclidean distance):

dist_{ed}(x_i,x_j)= \|x_i-x_j\|_2 = \sqrt{\sum_{u=1}^{n} |x_{iu}-x_{ju}|^2}\tag{式2.1.2}

p=1时,闵科夫斯基距离即曼哈顿距离(Manhattan distance),亦称“街区距离”(city block diatance):

dist_{man}(x_i,x_j)= \|x_i-x_j\|_1 = \sum_{u=1}^{n} |x_{iu}-x_{ju}|\tag{式2.1.3}

p \to \infty时,闵科夫斯基距离即切比雪夫距离(Chebyshev Distance):

dist_{che}(x_i,x_j) = \max_{u=1}^{n}(|x_{iu}-x_{ju}|)\tag{式2.1.4}

2.2 无序属性--VDM(Value Diffrence Metric)

m_{u,a}表示在属性u上取值为a的样本数,m_{u,a,i}表示在第i个样本簇中在属性u上取值为a的样本数,k为样本簇数,则属性u上两个离散值ab之间的VDM距离为

VDM_p(a,b) = \sum_{u=1}^{k}\left| \frac{m_{u,a,i}}{m_{u,a}}-\frac{m_{u,b,i}}{m_{u,b}}\right|^p\tag{式2.2}

2.3 混合属性

针对混合属性的样本,我们可以将闵科夫斯基距离和VDM结合处理。假定有n_c个有序属性,n-n_c个无序属性,不失一般性,令有序属性排列在无序属性之前,则

MinkovDM_p(x_i,x_j) = \left( \sum_{u=1}^{n_c} |x_{iu}-x_{ju}|^p + \sum_{u=n_c+1}^{n}VDM_p(x_{iu},x_{ju}) \right)^\frac{1}{p} \tag{式2.3}

2.4 加权距离

当样本空间中不同属性的重要性不同时,可使用加权距离(weighted distance)。以加权的闵科夫斯基距离为例:
dist_{wmk}(x_i,x_j) = (w_1\cdot |x_{i1}-x_{j1}|^p+...+w_n\cdot|x_{in}-x_{jn}|^p)^\frac{1}{p} \tag{式2.4}

其中权重w_i\geq0(i=1,2,...,n)表征不同属性的重要性。通常\sum_{i=1}^{n} w_i=1

3 常见距离计算公式

此节主要介绍机器学习和数据挖掘中一些常见的距离公式,包括:
闵可夫斯基距离
欧几里得距离
曼哈顿距离
切比雪夫距离
标准化的欧式距离
马氏距离
余弦相似度
皮尔逊相关系数
汉明距离
杰卡德相似系数
编辑距离
DTW 距离
KL 散度

3.1 闵可夫斯基距离

3.1.1 定义

闵氏距离不是一种距离,而是一组距离的定义。定义(式2.1.1)中,p是一个变参数。当p=1时,就是曼哈顿距离;当p=2时,就是欧氏距离(欧几里得距离);当p→∞时,就是切比雪夫距离;根据变参数的不同,闵氏距离可以表示一类的距离。

具体见上:2.1

3.1.2 闵氏距离的缺点

闵氏距离,包括曼哈顿距离、欧氏距离和切比雪夫距离都存在明显的缺点。
简单说来,闵氏距离的缺点主要有两个:

  • 将各个分量的量纲(scale),也就是“单位”当作相同的看待了。
  • 没有考虑各个分量的分布(期望,方差等)可能是不同的。

举例:二维样本(身高,体重),其中身高范围是150~190,体重范围是50~60,有三个样本:a(180,50),b(190,50),c(180,60)。那么a与b之间的闵氏距离(无论是曼哈顿距离、欧氏距离或切比雪夫距离)等于a与c之间的闵氏距离,但是身高的10cm真的等价于体重的10kg么?因此用闵氏距离来衡量这些样本间的相似度很有问题。

3.2 标准化的欧式距离

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

X^*=\frac{X-m}{s} \tag{式3.2.1}


标准化后的值=\frac{(标准化前的值-分量的均值)}{分量的标准差}\tag{式3.2.2}

经过简单的推导就可以得到两个n维向量x_i=(x_{i1};x_{i2};...;x_{in})x_j=(x_{j1};x_{j2};...;x_{jn})间的标准化欧氏距离的公式:

dist(x_i,x_j)=\sqrt{\sum_{u=1}^{n} \left(\frac{x_{iu}-x_{ju}}{s_u}\right)^2}\tag{式3.2.3}

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

3.3 马氏距离

3.3.1 定义

即数据的协方差距离,与欧式距离不同的是它考虑到各属性之间的联系,如考虑性别信息时会带来一条关于身高的信息,因为二者有一定的关联度,而且独立于测量尺度。
M个样本向量X_1~X_m,协方差矩阵记为S,均值记为向量μ,则其中样本向量Xu的马氏距离表示为:

D(X)=\sqrt{(X-u)^TS^{-1}(X-u)}\tag{式3.3.1}

而其中向量X_iX_j之间的马氏距离定义为:

D(X_i,X_j)=\sqrt{(X_i-X_j)^TS^{-1}(X_i-X_j)}\tag{式3.3.2}

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

D(X_i,X_j)=\sqrt{(X_i-X_j)^T(X_i-X_j)}\tag{式3.3.2} 也就是欧氏距离了。
若协方差矩阵是对角矩阵,公式变成了标准化欧氏距离。

3.3.2 优缺点
  1. 马氏距离的计算是建立在总体样本的基础上的,这一点可以从上述协方差矩阵的解释中可以得出,也就是说,如果拿同样的两个样本,放入两个不同的总体中,最后计算得出的两个样本间的马氏距离通常是不相同的,除非这两个总体的协方差矩阵碰巧相同;
  2. 在计算马氏距离过程中,要求总体样本数大于样本的维数,否则得到的总体样本协方差矩阵逆矩阵不存在,这种情况下,用欧式距离计算即可。
  3. 还有一种情况,满足了条件总体样本数大于样本的维数,但是协方差矩阵的逆矩阵仍然不存在,比如三个样本点(3,4),(5,6)和(7,8),这种情况是因为这三个样本在其所处的二维空间平面内共线。这种情况下,也采用欧式距离计算。
  4. 在实际应用中“总体样本数大于样本的维数”这个条件是很容易满足的,而所有样本点出现3中所描述的情况是很少出现的,所以在绝大多数情况下,马氏距离是可以顺利计算的,但是马氏距离的计算是不稳定的,不稳定的来源是协方差矩阵,这也是马氏距离与欧式距离的最大差异之处。

优点:不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关;由标准化数据和中心化数据(即原始数据与均值之差)计算出的二点之间的马氏距离相同。马氏距离还可以排除变量之间的相关性的干扰。
缺点:夸大了变化微小的变量的作用。

3.4 向量内积

向量内积是线性代数里最为常见的计算,实际上它还是一种有效并且直观的相似性测量手段。向量内积的定义如下:

Inner(x,y)=<x,y>=\sum_i^{n} x_iy_i\tag{式3.4.1}

直观的解释是:如果x高的地方y也比较高,x低的地方y也比较低,那么整体的内积是偏大的,也就是说xy是相似的。信号处理中DFT和DCT也是基于这种内积运算计算出不同频域内的信号组分(DFT和DCT是正交标准基,也可以看做投影)。向量和信号都是离散值,如果是连续的函数值,比如求区间[-1,1]两个函数之间的相似度,同样也可以得到(系数)组分,这种方法可以应用于多项式逼近连续函数,也可以用到连续函数逼近离散样本点(最小二乘问题,OLS coefficients)中。

3.4.1 余弦距离(Cosine Similarity)

利用闵可夫斯基度量对高维数据进行聚类通常是无效的,因为样本之间的距离随着维数的增加而增加。余弦距离测量两个矢量之间的夹角,而不是两个矢量之间的幅值差。它适用于高维数据聚类时相似度测量。

向量内积的结果是没有界限的,一种解决办法是除以长度之后再求内积,这就是应用十分广泛的余弦相似度(Cosine similarity):

dist(x,y)=\frac{<x,y>}{\|x\|\|y\|}=\frac{\sum_i^{} x_iy_i}{\sqrt{\sum_{i}^{}x_i^2}\sqrt{\sum_{i}^{}y_i^2}}\tag{式3.4.2}

余弦相似度与向量的幅值无关,只与向量的方向相关,在文档相似度(TF-IDF)和图片相似性(histogram)计算上都有它的身影。

3.4.2 皮尔逊相关系数

需要注意的是,余弦相似度受到向量的平移影响,上式如果将x平移到x+1, 余弦值就会改变。怎样才能实现平移不变性?这就是下面要说的皮尔逊相关系数(Pearson correlation),有时候也直接叫相关系数:

Corr(x,y)=\frac{\sum_i^{}(x_i-\overline{x})(y_i-\overline{y})}{\sqrt{\sum_{}^{}(x_i-\overline{x})^2\sqrt{\sum(y_i-\overline{y})^2}}}\\=\frac{<x-\overline{x},y-\overline{y}>}{\|x-\overline{x}\|\cdot\|y-\overline{y}\|}\\=CosSim(x-\overline{x},y-\overline{y})\tag{式3.4.3}

皮尔逊相关系数具有平移不变性和尺度不变性,计算出了两个向量(维度)的相关性。不过,一般我们在谈论相关系数的时候,将 x 与 y 对应位置的两个数值看作一个样本点,皮尔逊系数用来表示这些样本点分布的相关性。
由于皮尔逊系数具有的良好性质,在各个领域都应用广泛,例如,在推荐系统根据为某一用户查找喜好相似的用户,进而提供推荐,优点是可以不受每个用户评分标准不同和观看影片数量不一样的影响。

3.5 分类数据点间的距离

3.5.1 汉明距离(Hamming distance)

汉明距离(Hamming distance)是指,两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要作的最小替换次数。
如将a(11100)变换为b(00010),则其距离为4。
汉明距离主要是为了解决在通信中数据传输时,改变的二进制位数,也称为信号距离。
还可以用简单的匹配系数来表示两点之间的相似度

\frac{匹配字符数}{总字符数}\tag{式3.5.1}

在一些情况下,某些特定的值相等并不能代表什么。举个例子,用1 表示用户看过该电影,用0表示用户没有看过,那么用户看电影的的信息就可用0,1表示成一个序列。考虑到电影基数非常庞大,用户看过的电影只占其中非常小的一部分,如果两个用户都没有看过某一部电影(两个都是 0),并不能说明两者相似。反而言之,如果两个用户都看过某一部电影(序列中都是1),则说明用户有很大的相似度。在这个例子中,序列中等于1所占的权重应该远远大于0的权重,这就引出下面要说的杰卡德相似系数(Jaccard similarity)

3.5.2 杰卡德相似系数(Jaccard similarity)

杰卡德相似系数
两个集合A和B交集元素的个数在A、B并集中所占的比例,称为这两个集合的杰卡德系数,用符号J(A,B)表示。杰卡德相似系数是衡量两个集合相似度的一种指标(余弦距离也可以用来衡量两个集合的相似度)。

J(A,B)=\frac{|A \bigcap B|}{|A \bigcup B|}\tag{式3.5.2}

杰卡德距离
与杰卡德相似系数相反的概念是杰卡德距离(Jaccard Distance),可以用如下公式来表示:

J_\delta=1-J(A,B)=\frac{|A \bigcup B|-|A \bigcap B|}{|A \bigcup B|}\tag{式3.5.3}

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

分析

对于杰卡德相似系数或杰卡德距离来说,它处理的都是非对称二元变量。非对称的意思是指状态的两个输出不是同等重要的。

杰卡德相似度算法没有考虑向量中潜在数值的大小,而是简单的处理为0和1,不过,做了这样的处理之后,杰卡德方法的计算效率肯定是比较高的,毕竟只需要做集合操作。

3.6 序列之间的距离

3.6.1 编辑距离

上一小节我们知道,汉明距离可以度量两个长度相同的字符串之间的相似度,如果要比较两个不同长度的字符串,不仅要进行替换,而且要进行插入与删除的运算,在这种场合下,通常使用更加复杂的 编辑距离(Edit distance, Levenshtein distance) 等算法。编辑距离是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离求的是最少编辑次数,这是一个动态规划的问题。

3.6.2 DTW 距离

时间序列是序列之间距离的另外一个例子。DTW 距离(Dynamic Time Warp)是序列信号在时间或者速度上不匹配的时候一种衡量相似度的方法。DTW 距离在保持信号先后顺序的限制下对时间信号进行“膨胀”或者“收缩”,找到最优的匹配,与编辑距离相似,这也是一个动态规划的问题。

举例:两份原本一样声音样本A、B都说了“你好”,A在时间上发生了扭曲,“你”这个音延长了几秒。最后A:“你~~~好”,B:“你好”。DTW正是这样一种可以用来匹配A、B之间的最短距离的算法。

3.7 概率分布之间的距离

不只是两个数值点之间的距离,实际上两个概率分布之间的距离是可以测量的。在统计学里面经常需要测量两组样本分布之间的距离,进而判断出它们是否出自同一个population,常见的方法有卡方检验(Chi-Square)KL散度(KL-Divergence),这里我们介绍一下KL散度。

3.7.1 KL散度(相对熵)

信息熵 如果一个随机变量X的可能取值为X={x_1,x_2,...,x_n},对应的概率为p(X=x_i)(i=1,2,...,n),则随机变量X的熵定义为: H(X)=-\sum_{i=1}^{n} p(x_i) \log p(x_i)\tag{式3.7.1}

熵是随机变量不确定性的度量,不确定性越大,熵就越大,如果是常量,就是零。不确定性度量的本质就是信息量的期望。均匀分布是最不确定的分布(在没有任何条件下,就是不知道均值和方差的情况下)。如果在均值和方差都知道的情况下,那就是高斯分布的熵最大。

KL散度(相对熵)
相对熵又称互熵,交叉熵,鉴别信息,Kullback熵,Kullback-Leible散度(即KL散度)等。 设p(x)q(x)X取值的两个概率概率分布,则pq的相对熵为:

D(p\|q)=\sum_{i=1}^{n}p(x) \ln \frac{p(x)}{q(x)}\tag{式3.7.2}

熵的大小与字符平均最短编码长度是一样的(shannon)。设有一个未知的分布p(x),而q(x)是我们所获得的一个对p(x)的近似,按照q(x)对该随机变量的各个值进行编码,平均长度比按照真实分布的p(x)进行编码要额外长一些,多出来的长度这就是KL散度(之所以不说距离,是因为不满足对称性和三角形法则),即: KL(p\|q)=-\int{p(x)\ln q(x)dx}-\left(-\int{p(x)\ln p(x) dx}\right)\\=-\int{p(x)\ln\left\{ \frac{p(x)}{q(x)}\right\}}\tag{式3.7.3}

在一定程度上,熵可以度量两个随机变量的距离。KL散度是两个概率分布P和Q差别的非对称性的度量。KL散度是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外的位元数。 典型情况下,P表示数据的真实分布,Q表示数据的理论分布,模型分布,或P的近似分布。

4 参考资料

[1].周志华.机器学习.清华大学出版社,2016.1:199-201
[2].漫谈:机器学习中距离和相似性度量方法
[3].距离度量以及python实现(一)
[4].聚类分析之距离计算(二)
[5].[聚类一]之距离计算
[6].KL散度(Kullback-Leibler Divergence)

转载于:https://juejin.im/post/5bc6dc08f265da0af1616d7e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值