前段时间判别职住分离车辆的时候需要计算自身轨迹的相似性,相似性其实就是某种距离的远近,距离近就相似度高,距离远相似度就低。近朱者赤近墨者黑,距离越近,颜色越相似。
很多算法都需要用到距离,比如knn、kmeans、dbscan等很多理论也需要用距离这个概念来帮助理解,比如前文提到的“范数”,那么距离都怎么算呢?下面是常用的几种距离计算方式:
A、闵可夫斯基距离(应该是一个俄国的老司机)
记得 范数 有一个Lp范数,闵可夫斯基距离严格来说也不是一种距离,而是一系列距离的定义:
当p=1 时,曼哈顿距离。当p=2时。欧式距离(用的较多)
B、曼哈顿距离(也称为城市街区距离)
虽然没去过,大意就是四四方方的井字形格子街区,然后计算从某个十字路口去另外一个十字路口的距离计算。对应 L1范数。
C、欧式距离(欧几里得距离)
欧式距离对应L2 范数
可以用三角形勾三股四玄五的计算方式来理解。
D、切比雪夫距离
切比雪夫距离对应无穷范数
以上的距离是和范数一一对应的。下面是其它集中距离度量方式:
E、余弦夹角
夹角余弦的取值范围为[-1,1],可以用来衡量两个向量方向的差异;夹角余弦越大,表示两个向量的夹角越小;当两个向量的方向重合时,夹角余弦取最大值1;当两个向量的方向完全相反时,夹角余弦取最小值-1。
机器学习中用这一概念来衡量样本向量之间的差异,其数学表达式如下:
F、编辑距离(Levenshtein 距离,莱温斯坦距离,不是莱温斯基)
两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如,kitten与sitting之间的编辑距离为3。
G、汉明距离
两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。例如,1011101 与 1001001 之间的汉明距离是 2。
H、杰卡德相似系数 和杰卡德距离
两个集合A和B的交集元素在A和B的并集中所占的比例称为两个集合的杰卡德相似系数,用符号J(A,B)表示,数学表达式为:
杰卡德相似系数是衡量两个集合的相似度的一种指标。一般可以将其用在衡量样本的相似度上。
杰卡德距离则和杰卡德相似系数相反,
I、马氏距离
表示数据的协方差距离。它是一种有效的计算两个未知样本集的相似度的方法。与欧式距离不同的是,它考虑到各种特性之间的联系(例如:一条关于身高的信息会带来一条关于体重的信息,因为两者是有关联的),并且是尺度无关的(scale-invariant),即独立于测量尺度。
如果去掉马氏距离中的协方差矩阵,就退化为欧氏距离。那么我们就需要探究这个多出来的因子究竟有什么含义。
以下例子很好帮助理解:
如果我们以厘米为单位来测量人的身高,以克(g)为单位测量人的体重。每个人被表示为一个两维向量,如一个人身高173cm,体重50000g,表示为(173,50000),根据身高体重的信息来判断体型的相似程度。
我们已知小明(160,60000);小王(160,59000);小李(170,60000)。根据常识可以知道小明和小王体型相似。但是如果根据欧几里得距离来判断,小明和小王的距离要远远大于小明和小李之间的距离,即小明和小李体型相似。这是因为不同特征的度量标准之间存在差异而导致判断出错。
以克(g)为单位测量人的体重,数据分布比较分散,即方差大,而以厘米为单位来测量人的身高,数据分布就相对集中,方差小。马氏距离的目的就是把方差归一化,使得特征之间的关系更加符合实际情况。
阅读完此文,你应该明白一个道理:世界上最遥远的距离,不是生与死,而是看要怎么度量? hah
领取专属 10元无门槛券
私享最新 技术干货