患者相似性中常用的距离度量方法总结

背景描述

在2017年左右,深度学习刚刚起步的时间点,在构建临床决策支持的相关技术路线时,患者相似性这一技术思路仍具有很好的临床适用性,主要是由于其背后的类比推理的思想,既不同于演绎推理也不同于归纳推理。类比推理是临床适用最广的一种推理思想,即由相似病例的思考角度出发,给新的病例推荐诊疗手段,因此天然地易于被临床医生所接受,也具有更好的临床可解释性。

但是该思路显然不是当前的主流,也不是未来的方向,尽管很多研究曾尝试将距离度量与深度学习相结合,但起效甚微。很多年前对一些相关的距离度量方法做过简单的总结和计算,但是很多都忘光了,因此本帖的目的是重新对相关的距离度量方法做一次系统的总结。

注意:本帖的很多图片以及文字资料都是多处搜集到的,因此若有侵权,请联系删除。

1. 欧氏距离(Euclidean Distance)

在这里插入图片描述
欧氏距离,全称为欧几里得距离,也是最常见的距离度量。直观解释就是空间中连接两点的线段的长度。公式如下:
D ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 D(x,y) = \sqrt{\sum_{i=1}^{n}(x_i-y_i)^2} D(x,y)=i=1n(xiyi)2
代码实现:

#欧氏距离
def dis_eu(v1,v2):
    if len(v1) == len(v2):
        return sum([(v1[i] - v2[i])**2 for i in range(len(v1))]) ** (1.0/2)
dis_eu(v1,v2)  #结果为sqrt(50) = 7.07

缺点:
虽然是一种计算简单,非常常见的距离度量,但是欧式距离不是尺度不变的,意味着欧氏距离的计算可能会根据特征间的单位尺度的变化而发生偏斜。因此通常在计算欧氏距离之前需要对其进行数据的归一化。
此外,随着数据维度的增加,欧式距离的适用性会下降,这与维数的"诅咒"有关。关于高维条件下的欧氏距离的详细分析,可以参考下述链接。

Why is Euclidean distance not a good metric in high dimensions?

用例:
欧几里得距离适用于低维数据,矢量的大小很重要,需要测量。如果在低维数据上使用欧几里得距离,像kNN和HDBSCAN这样的方法会显示出很好的开箱即用结果。

尽管许多其他的测量方法已经被开发出来,用于解决欧几里得距离的缺点,它仍然是最常用的距离方法之一,且有充分的理由。它使用起来非常直观,实现起来非常简单,并且在许多用例中都显示了很好的效果。

2. 标准化欧氏距离(Standardized Euclidean Distance)

标准化欧氏距离是针对欧氏距离的缺点而作的一种改进,但要求必须基于一个数据集的分布。
思路: 既然数据各维分量的分布不一样, 那先将各个分量都“标准化”到均值、方差相等,即使得各个维度分别满足标准正态分布。 假设样本集 X X X 的均值(mean)为 μ \mu μ, 标准差(standard deviation)为 σ \sigma σ X X X 的“标准化变量”表示为:
X ∗ = X − μ σ X^*=\frac{X-\mu}{\sigma} X=σXμ
进而便可基于标准化处理之后的样本集输入,进行标准欧氏距离的计算。

3. 余弦距离(Cosine Distance)

在这里插入图片描述
注意区分余弦相似度与余弦距离之间的关系,按照WIKI上的说法:
D C ( A , B ) = 1 − S C ( A , B ) D_C(A,B)=1-S_C(A,B) DC(A,B)=1SC(A,B)
其中, D C D_C DC 是余弦距离, S C S_C SC 是余弦相似度。其中余弦相似度的计算公式如下:
c o s i n e   s i m i l a r i t y = c o s ( θ ) = A ⋅ B ∣ ∣ A ∣ ∣ ∣ ∣ B ∣ ∣ = ∑ i = 1 n A i B i ∑ i = 1 n A i 2 ∑ i = 1 n B i 2 cosine \space similarity=cos(\theta)=\frac{A\cdot B}{||A||||B||}=\frac{\sum_{i=1}^{n}A_iB_i}{\sqrt{\sum_{i=1}^{n}A_i^2}\sqrt{\sum_{i=1}^n B_i^2}} cosine similarity=cos(θ)=∣∣A∣∣∣∣B∣∣AB=i=1nAi2 i=1nBi2 i=1nAiBi
其中 A i , B i A_i,B_i AiBi 分别是向量 A A A B B B 的元素。

简单来说,余弦相似度只是计算两个向量之间夹角的余弦值。余弦距离就是用1减去这个获得的余弦相似度。两个方向完全相同的向量的余弦相似度为 1,而两个完全相反的向量的相似度为 -1,因此取值范围在 [ − 1 , 1 ] [-1,1] [1,1]。而对应的,余弦距离的取值范围就在 [ 0 , 2 ] [0,2] [0,2] 之间。
代码实现:

#余弦距离
def dis_cos(v1,v2):
    if len(v1) == len(v2):
        mo1 = (sum([x*x for x in v1])) ** (1.0/2)
        mo2 = (sum([x*x for x in v2])) ** (1.0/2)
        return 1 - (sum(v1 * v2) / mo1 / mo2)
dis_cos(v1,v2)  #结果为 1.78

缺点:
需要注意的是,余弦相似度是不考虑向量的大小的,而只考虑他们的方向。在实践中,这意味着没有充分考虑值的差异。以一个推荐系统为例,余弦相似度就没有考虑到不同用户之间的评分尺度的差异。
那为什么会这样呢?我们可以从上述余弦相似度的公式出发,在 A B AB AB 模长固定的情况下,两者点积越大就等同于夹角余弦值越大,即夹角越小,两者越相近。但是一般来说, A B AB AB 模长不会固定,即使点积值越高,其向量也不一定接近。例如 ( 1 , 1 ) (1,1) (1,1) ( 2 , 2 ) (2,2) (2,2) ( − 1 , − 1 ) (-1,-1) (1,1) 之间的余弦相似度是一样的,即只考虑了方向,而没有考虑值的大小。

用例:
当我们有高维数据和向量的大小不重要时,我们经常使用余弦相似度。对于文本分析,当数据以单词计数表示时,经常使用此度量。例如,当一个单词在一个文档中出现的频率高于另一个文档时,这并不一定意味着一个文档与这个单词的相关性更高。可能出现的情况是,文档的长度不均匀,计数的大小不那么重要。然后,我们最好使用不考虑大小的余弦相似度

4. 汉明距离(Hamming Distance)

在这里插入图片描述
汉明距离是两个向量之间不同的值的数量。它通常用于比较两个相等长度的二进制字符串。它还可以用于字符串,通过计算彼此不同的字符数来比较它们之间的相似程度。

缺点:
如你所料,当两个向量的长度不相等时,很难使用汉明距离。为了了解哪些位置不匹配,您可能希望比较相同长度的向量。
此外,只要它们不同或相等,它就不考虑实际值。因此,当大小是一个重要的度量时,不建议使用这个距离度量。

用例:
典型的用例包括数据通过计算机网络传输时的错误纠正/检测。它可以用来确定二进制字中distorted bit的数目,作为估计误差的一种方法。
此外,还可以使用汉明距离来度量分类变量之间的距离。

5. 曼哈顿距离(Manhattan Distance)

在这里插入图片描述
曼哈顿距离,通常称为出租车距离或城市街区距离,计算实值向量之间的距离。想象一下在棋盘等统一网格上描述对象的向量。曼哈顿距离是指两个向量之间的距离,如果它们只能移动直角。计算距离不涉及对角线移动。公式描述如下:
D ( x , y ) = ∑ i = 1 k ∣ x i − y i ∣ D(x,y)=\sum_{i=1}^k|x_i-y_i| D(x,y)=i=1kxiyi

缺点:
尽管曼哈顿距离似乎适用于高维数据,但它是一种不如欧氏距离直观的度量,尤其是在用于高维数据时。此外,由于它不是可能的最短路径,它比欧几里得距离更有可能给出一个更高的距离值。这并不一定会带来问题,但这是你应该考虑的。

用例:
数据集具有离散和/或二元属性时Manhattan Distance比较合适,因为它考虑了在这些属性值中实际可以采用的路径。以欧几里得距离为例,它会在两个向量之间创建一条直线,而实际上这可能实际上是不可能的。

6. 切比雪夫距离(Chebyshev Distance)

在这里插入图片描述切比雪夫距离定义为两个向量沿任意坐标维度的最大差值。换句话说,它只是沿一个轴的最大距离。由于其性质,它通常被称为棋盘距离,因为国王从一个方格到另一个方格的最小步数等于切比雪夫距离。公式描述如下:
D ( x , y ) = m a x i ( ∣ x i − y i ∣ ) D(x,y)=max_i(|x_i-y_i|) D(x,y)=maxi(xiyi)

代码描述如下:

#切比雪夫
def dis_che(v1,v2):
    if len(v1) == len(v2):
        return max([abs(v1[i] - v2[i]) for i in range(len(v1))])
dis_che(v1,v2)  #结果为 5

缺点:
切比雪夫通常用于非常特定的用例,这使得它很难用作通用的距离度量,如欧氏距离或余弦相似度。因此,建议只在绝对确定它适合你的用例时才使用它。

用例:
如前所述,切比雪夫距离可用于提取行走从一个方块到另一个方块所需的最小步数。此外,在允许无限制的8向移动的游戏中,这也是一种有用的措施。

在实践中,切比雪夫距离经常用于仓库物流,因为它非常类似于起重机移动一个物体的时间。

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

在这里插入图片描述
闵氏距离不是一种距离, 而是一组距离的定义, 是对多个距离度量公式的概括性的表述。公式描述如下:
D ( x , y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p D(x,y)=(\sum_{i=1}^n|x_i-y_i|^p)^{\frac{1}{p}} D(x,y)=(i=1nxiyip)p1

关于这个距离度量最有趣的是参数 p 的使用。我们可以使用这个参数来操纵距离度量,使其与其他度量非常相似。
常见的p值有:

p=1 — Manhattan distance
p=2 — Euclidean distance
p=∞ — Chebyshev distance
代码描述如下:

#闵可夫斯基距离
def dis_wen(v1,v2,p):
    if len(v1) == len(v2):
        return sum([abs(v1[i] - v2[i])**p for i in range(len(v1))]) ** (1.0/p)
dis_wen(v1,v2,1)  # 结果为 12.0,与曼哈顿距离一致
dis_wen(v1,v2,2)  # 结果为 7.07,与欧式距离一致

缺点:
闵可夫斯基与它们所代表的距离度量具有相同的缺点,因此,良好地理解曼哈顿距离、欧几里得距离和切比雪夫距离等度量标准是非常重要的。

此外,使用参数p实际上可能很麻烦,因为根据你的用例,查找正确的值在计算上可能非常低效。

用例:
p的好处是可以迭代它,并找到最适合用例的距离度量。它允许你在距离度量上有很大的灵活性,如果你非常熟悉p和许多距离度量,这将是一个巨大的好处。

8. 马氏距离(Mahalanobis Distance)

马氏距离(Mahalanobis Distance)是一种距离的度量,可以看作是欧氏距离的一种修正,修正了欧式距离中各个维度尺度不一致且相关的问题。相关公式定义如下所示:
单个数据点到 μ \mu μ 的马氏距离:
D M ( x ) = ( x − μ ) T Σ − 1 ( x − μ ) D_M(x)=\sqrt{(x-\mu)^T\Sigma^{-1}(x-\mu)} DM(x)=(xμ)TΣ1(xμ)

数据点 x x x y y y 之间的马氏距离:
D M ( x , y ) = ( x − y ) T Σ − 1 ( x − y ) D_M(x,y)=\sqrt{(x-y)^T\Sigma^{-1}(x-y)} DM(x,y)=(xy)TΣ1(xy)

其中 Σ \Sigma Σ 是多维随机变量的协方差矩阵, μ \mu μ 为样本均值。

若协方差矩阵是单位矩阵(各个样本向量之间独立同分布),则 x x x y y y 之间的马氏距离就等于他们之间的欧氏距离;若协方差矩阵是对角矩阵,那就是标准化欧式距离。
D M ( x , y ) = ( x − y ) T ( x − y ) D_M(x,y)=\sqrt{(x-y)^T(x-y)} DM(x,y)=(xy)T(xy)
在这里插入图片描述
若协方差矩阵是单位阵,那么右图马氏空间的样本分布就会简化为左图欧式空间的样本分布。

关于独立同分布的理解,可以参考链接:https://zhuanlan.zhihu.com/p/52530189

8.1 马氏距离的实际意义是啥?

那么马氏距离就能能干什么?它比欧氏距离好在哪里?举几个栗子。

欧式距离近就一定相似?
先举个比较常用的例子,身高和体重,这两个变量拥有不同的单位标准,也就是有不同的scale。比如身高用毫米计算,而体重用千克计算,显然差10mm的身高与差10kg的体重是完全不同的。但在普通的欧氏距离中,这将会算作相同的差距。

归一化后欧氏距离近就一定相似?
当然我们可以先做归一化来消除这种维度间scale不同的问题,但是样本分布也会影响分类

下图有两个正态分布的总体,它们的均值分别为a和b,但方差不一样,则图中的A点离哪个总体更近? 或者说A有更大的概率属于谁? 显然, A离左边的更近, A属于左边总体的概率更大, 尽管A与a的欧式距离远一些。 这就是马氏距离的直观解释。
在这里插入图片描述
所以,在一个方差较小的维度下很小的差别就有可能成为离群点。就像下图一样,A与B相对于原点的距离是相同的。但是由于样本总体沿着横轴分布,所以B点更有可能是这个样本中的点,而A则更有可能是离群点。
在这里插入图片描述
算上维度的方差就够了?
还有一个问题——如果维度间不独立同分布,样本点一定与欧氏距离近的样本点同类的概率更大吗?
在这里插入图片描述
可以看到样本基本服从 f ( x ) = x f(x) = x f(x)=x 的线性分布,A与B相对于原点的距离依旧相等,显然A更像是一个离群点。

**即使数据已经经过了标准化,也不会改变AB与原点间距离大小的相互关系。**所以要本质上解决这个问题,就要针对主成分分析中的主成分来进行标准化。

因此,马氏距离就是基于样本分布的一种距离

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

8.2 马氏距离的几何意义是啥?

上面搞懂了,马氏距离就好理解了,只需要将变量按照主成分进行旋转,让维度间相互独立,然后进行标准化,让维度同分布就OK了。

由主成分分析可知,由于主成分就是特征向量方向,每个方向的方差就是对应的特征值,所以只需要按照特征向量的方向旋转,然后缩放特征值倍就可以了,可以得到以下的结果:
在这里插入图片描述
离群点就被成功分离,这时候的欧式距离就是马氏距离。

8.3 马氏距离的推导

相关推导可以参考 马氏距离(Mahalanobis Distance),此处不再做赘述。

8.4 马氏距离的问题

  • 协方差矩阵必须满秩
    里面有求逆矩阵的过程,不满秩不行,要求数据要有原维度个特征值,如果没有可以考虑先进行 PCA,这种情况下PCA不会损失信息。
  • 不能处理非线性流形(manifold)上的问题
    只对线性空间有效,如果要处理流形,只能在局部定义,可以用来建立KNN图。

9. 杰卡德指数(Jaccard Index)

在这里插入图片描述
Jaccard 指数(或 Intersection over Union)是用于计算样本集相似性和多样性的度量。它是交集的大小除以样本集并集的大小。

在实践中,它是集合之间相似实体的总数除以实体总数。例如,如果两个集合有 1 个共同的实体并且总共有 5 个不同的实体,那么 Jaccard 指数将为 1/5 = 0.2。

要计算 Jaccard 距离,我们只需从 1 中减去 Jaccard 指数:
D ( x , y ) = 1 − ∣ x ∩ y ∣ ∣ y ∪ x ∣ D(x,y)=1-\frac{|x \cap y|}{|y \cup x|} D(x,y)=1yxxy

缺点:
Jaccard 指数的一个主要缺点是它受数据大小的影响很大。大型数据集会对索引产生很大影响,因为它可以显着增加并集,同时保持交集相似。

用例:
Jaccard索引经常用于使用二进制或二进制化数据的应用程序中。当你有一个深度学习模型来预测一幅图像(例如一辆汽车)的片段时,Jaccard索引就可以用来计算给出真实标签的预测片段的准确性。

同样,它也可以用于文本相似度分析,以衡量文档之间的选词重叠程度。因此,它可以用来比较模式集。

参考资料

  1. 一图看遍9种距离度量,图文并茂,详述应用场景!
  2. 7种常用的距离度量方法
  3. 机器学习中的八大距离度量
  4. 马氏距离(Mahalanobis Distance)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值