1. 全面归纳距离和相似度计算方法
距离(distance,差异程度)、相似度(similarity,相似程度)方法可以看作是以某种的距离函数计算元素间的距离,这些方法作为机器学习的基础概念,广泛应用于如:Kmeans聚类、协同过滤推荐算法、相似度算法、MSE损失函数等等。本文对常用的距离计算方法进行归纳以及解析,分为以下几类展开:
对于点x=(x1,x2...xn) 与点y=(y1,y2...yn) , 闵氏距离可以用下式表示:
闵氏距离是对多个距离度量公式的概括性的表述,p=1退化为曼哈顿距离;p=2退化为欧氏距离;切比雪夫距离是闵氏距离取极限的形式。
曼哈顿距离 公式:
欧几里得距离公式:
如下图蓝线的距离即是曼哈顿距离(想象你在曼哈顿要从一个十字路口开车到另外一个十字路口实际驾驶距离就是这个“曼哈顿距离”,此即曼哈顿距离名称的来源,也称为城市街区距离),红线为欧几里得距离:
切比雪夫距离起源于国际象棋中国王的走法,国际象棋中国王每次只能往周围的8格中走一步,那么如果要从棋盘中A格(x1,y1)走到B格(x2,y2)最少需要走几步?你会发现最少步数总是max(|x2-x1|,|y2-y1|)步。有一种类似的一种距离度量方法叫切比雪夫距离。
切比雪夫距离就是当p趋向于无穷大时的闵氏距离:
距离函数并不一定是距离度量,当距离函数要作为距离度量,需要满足:
由此可见,闵氏距离可以作为距离度量,而大部分的相似度并不能作为距离度量。
闵氏距离也是Lp范数(如p==2为常用L2范数正则化)的一般化定义。
下图给出了一个Lp球( ||X||p = 1 )的形状随着P的减少的可视化图:
距离度量随着空间的维度d的不断增加,计算量复杂也逐增,另外在高维空间下,在维度越高的情况下,任意样本之间的距离越趋于相等(样本间最大与最小欧氏距离之间的相对差距就趋近于0),也就是维度灾难的问题,如下式结论:
对于维度灾难的问题,常用的有PCA方法进行降维计算。
假设各样本有年龄,工资两个变量,计算欧氏距离(p=2)的时候,(年龄1-年龄2)² 的值要远小于(工资1-工资2)² ,这意味着在不使用特征缩放的情况下,距离会被工资变量(大的数值)主导, 特别当p越大,单一维度的差值对整体的影响就越大。因此,我们需要使用特征缩放来将全部的数值统一到一个量级上来解决此问题。基本的解决方法可以对数据进行“标准化”和“归一化”。
另外可以使用马氏距离(协方差距离),与欧式距离不同其考虑到各种特性之间的联系是(量纲)尺度无关 (Scale Invariant) 的,可以排除变量之间的相关性的干扰,缺点是夸大了变化微小的变量的作用。马氏距离定义为:
马氏距离原理是使用矩阵对两两向量进行投影后,再通过常规的欧几里得距离度量两对象间的距离。当协方差矩阵为单位矩阵,马氏距离就简化为欧氏距离;如果协方差矩阵为对角阵,其也可称为正规化的欧氏距离。
根据向量x,y的点积公式:
我们可以利用向量间夹角的cos值作为向量相似度[1]:
余弦相似度的取值范围为:-1~1,1 表示两者完全正相关,-1 表示两者完全负相关,0 表示两者之间独立。余弦相似度与向量的长度无关,只与向量的方向有关,但余弦相似度会受到向量平移的影响(上式如果将 x 平移到 x+1, 余弦值就会改变)。
另外,归一化后计算欧氏距离,等价于余弦值:两个向量x,y, 夹角为A,欧氏距离D=(x-y)^2 = x 2+y 2-2|x||y|cosA = 2-2cosA
协方差是衡量多维数据集中,变量之间相关性的统计量。如下公式X,Y的协方差即是,X减去其均值 乘以 Y减去其均值,所得每一组数值的期望(平均值)。
如果两个变量之间的协方差为正值,则这两个变量之间存在正相关,若为负值,则为负相关。
皮尔逊相关系数数值范围也是[-1,1]。皮尔逊相关系数可看作是在余弦相似度或协方差基础上做了优化(变量的协方差除以标准差)。它消除每个分量标准不同(分数膨胀)的影响,具有平移不变性和尺度不变性。
卡方检验X2,主要是比较两个分类变量的关联性、独立性分析。如下公式,A代表实际频数;E代表期望频数:
Levenshtein 距离是 编辑距离 (Editor Distance) 的一种,指两个字串之间,由一个转成另一个所需的最少编辑操作次数。允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。
像hallo与hello两个字符串编辑距离就是1,我们通过替换”a“ 为 ”e“,就可以完成转换。
汉明距离为两个等长字符串对应位置的不同字符的个数,也就是将一个字符串变换成另外一个字符串所需要替换的字符个数。例如:1011101 与 1001001 之间的汉明距离是 2,“toned” 与 “roses” 之间的汉明距离是 3
另外的,对于字符串距离来说,不同字符所占的份量是不一样的。比如”我乐了“ 与【“我怒了”,”我乐了啊” 】的Levenshtein 距离都是1,但其实两者差异还是很大的,因为像“啊”这种语气词的重要性明显不如“乐”,考虑字符(特征)权重的相似度方法有:TF-IDF、BM25、WMD算法。
Jaccard 取值范围为0~1,0 表示两个集合没有重合,1 表示两个集合完全重合。
但Dice不满足距离函数的三角不等式,不是一个合适的距离度量。
基础地介绍下信息熵,用来衡量一个随机变量的不确定性程度。对于一个随机变量 X,其概率分布为:
互信息用于衡量两个变量之间的关联程度,衡量了知道这两个变量其中一个,对另一个不确定度减少的程度。公式为:
如下图,条件熵表示已知随机变量X的情况下,随机变量Y的信息熵,因此互信息实际上也代表了已知随机变量X的情况下,随机变量Y的(信息熵)不确定性的减少程度。
JS 散度解决了 KL 散度不对称的问题,定义为:
群体稳定性指标(Population Stability Index,PSI), 可以看做是解决KL散度非对称性的一个对称性度量指标,用于度量分布之间的差异(常用于风控领域的评估模型预测的稳定性)。
psi与JS散度的形式是非常类似的,如下公式:
PSI的含义等同P与Q,Q与P之间的KL散度之和。
DTW 距离用于衡量两个序列之间的相似性,适用于不同长度、不同节奏的时间序列。DTW采用了动态规划DP(dynamic programming)的方法来进行时间规整的计算,通过自动warping扭曲 时间序列(即在时间轴上进行局部的缩放),使得两个序列的形态尽可能的一致,得到最大可能的相似度。(具体可参考[5])
图结构间的相似度计算,有图同构、最大共同子图、图编辑距离、Graph Kernel 、图嵌入计算距离等方法(具体可参考[4][6])。
度量学习的对象通常是样本特征向量的距离,度量学习的关键在于如何有效的度量样本间的距离,目的是通过训练和学习,减小或限制同类样本之间的距离,同时增大不同类别样本之间的距离,简单归类如下[2]:
最后,附上常用的距离和相似度度量方法[3]:
2. 距离测量的方法主要有哪些
1.根据测量条件分为
(1)等精度测量:用相同仪表与测量方法对同一被测量进行多次重复测量
(2)不等精度测量:用不同精度的仪表或不同的测量方法, 或在环境条件相差很大时对同一被测量进行多次重复测量
2.根据被测量变化的快慢分为
(1)静态测量
(2)动态测量
1.直接测量法:不必测量与被测量有函数关系的其他量,而能直接得到被测量值的测量方法。
2.间接测量法:通过测量与被测量有函数关系的其他量来得到被测量值的测量方法。
3.定义测量法:根据量的定义来确定该量的测量方法。
4.静态测量方法:确定可以认为不随时间变化的量值的测量方法。
5.动态测量方法:确定随时间变化量值的瞬间量值的测定方法。
6.直接比较测量法:将被测量直接与已知其值的同种量相比较的测量方法。
7.微差测量法:将被测量与只有微小差别的已知同等量相比较,通过测量这两个量值间的差值来确定被测量值的测量方法。
在简易测绘中测量距离最为重要,方法也最多。拣些最简单实用的讲一讲。
1.步测
每人都有一副灵便的尺子,随时带在身边,使用起来十分方便。这副尺子就是我们的双脚。用双脚测量距离,首先要知道自己的步子有多大?走的快慢有个谱。不然,也是测不准确的。《队列条令》上对步子的大小有个规定,齐步走时,一单步长七十五厘米,走两单步为一复步,一复步长一米五;行进速度每分钟一百二十单步。
为啥规定步长一米五,步速每分钟一百二十单步呢?这是根据经验得来的。无数次测验的结果说明:一个成年人的步长,大约等于他眼睛距离地面高度的一半,例如某人从脚根到眼睛的高度是150厘米,他的步长就是75厘米。如果你有兴趣的话,不妨自己量量看。
还有一个经验:我们每小时能走的公里数,恰与每三秒钟内所迈的步数相同。例如,你平均三秒钟能走五单步,那每小时你就可以走五公里。不信,也可以试一试。
这两个经验,只是个大概数,对每个人来说,不会一点不差,这里有个步长是否均匀,快慢能否保持一致的问题。要想准确地测定距离,就要经常练习自己的步长和步速。
怎么练习呢?连队不是天天出操、练步法吗?这就是练习步长和步速的极好机会。
还有个练习的办法,在公路上,每隔一公里就有一块里程碑,你可以经常用步子走一走,算算步数,看看时间,反复体会自己的步长和速度。
掌握了自己的步长和步速,步测就算学会了。步测时,只要记清复步数或时间,就能算出距离。例如,知道自己的复步长1.5米,数得某段距离是540复步,这段距离就是:540×1.5米=810米。若知道自己的步速是每分钟走54复步,走了10分钟,也可以算出这段距离是:54×10=540复步,540×1.5米=810米。根据复步与米数的关系,我们把这个计算方法简化为一句话:"复步数加复步数之半,等于距离。"就能很快地算出距离来。
2.目测
人的眼睛是天生的测量"仪器",它既可以看近,近到自己的鼻子尖,又能看远,远到宇宙太空的天体。用眼睛测量距离,虽然不能测出非常准确的数值,但是,只要经过勤学苦练,还是可以测得比较准确的。在我军炮兵部队中,有许多同志练出了一手过硬的目测本领,他们能在几秒钟内,准确地目测出几千米以内的距离,活象是一部测距机。
怎样用眼睛测量物体的距离呢?
人的视力是相对稳定的,随着物体的远近不同,视觉也不断地起变化,物体的距离近,视觉清楚,物体的距离远,视觉就模糊。
而物体的形状都有一定规律的,各种不同物体的远近不同,它们的清晰程度也不一样。我们练习目测,就是要注意观察、体会各种物体在不同距离上的清晰程度。观察的多了,印象深了,就可以根据所观察到的物体形态,目测出它的距离来。例如当一个人从远处走来,离你2000米时,你看他只是一个黑点;离你1000米时,你看他身体上下一般粗;500米时,能分辨出头、肩和四肢;离200米时,能分辩出他们的面孔、衣服颜色和装具。
这种目测距离的本领,主要得*自己亲身去体会才能学到手。别人的经验,对你并不是完全适用的,下面这个表里列的数据,是在一般情况下,正常人眼力观察的经验,只能供同志们参考。
不同距离上不同目标的清晰程度
距离(米)分辨目标清晰程度
100人脸特征、手关节、步兵火器外部零件。
150-170衣服的纽扣、水壶、装备的细小部分。
200房顶上的瓦片、树叶、铁丝。
250-300墙可见缝,瓦能数沟;人脸五官不清;衣服、轻机枪、步枪的颜色可分。
400人脸不清,头肩可分。
500门见开关,窗见格,瓦沟条条分不清;人头肩不清,男女可分。
700瓦面成丝;窗见衬;行人迈腿分左右,手肘分不清。
1000房屋轮廓清楚,瓦片乱,门成方块窗衬消;人体上下一般粗。
1500瓦面平光,窗成洞;行人似蠕动,动作分不清。
2000窗是黑影,门成洞;人成小黑点,停、动分不清。
3000房屋模糊,门难辨,房上烟囱还可见。
你觉得根据目标的清晰程度判断距离没有把握时,还可以利用与现地的已知距离,相互进行比较,有比较才能判定。比如,两电线杆之间的距离,一般为五十米,如果观测目标附近有电线杆,就可以将观测的物体与电引杆间隔比较,然后再判定。现地没有距离比较时,就用平时自己较熟悉的50米、100米、200米、500米等基本距离,经过反复回忆比较后再判定。如果要测的距离较长,可以分段比较,尔后推算全长。
由于天候、阳光、物体颜色和观察位置、角度的不同,眼睛的分辨力常会受到影响,目测的距离就会产生误差。
晴天:面向阳光观测,眼睛受到光线的刺激,视力会减弱,容易把物体测远了;如背向阳光观测,眼睛不受光线刺激,物体被阳光照射得清晰明亮,容易把物体测近了。
阴天或早晚天色较暗时:能见度减弱,物体显得模糊,容易把目标测远了。
雨后:空气清新,物体颜色鲜明,又容易把目标测近了。
在开阔地形上目测,或隔着水面、沟谷观察,或从高处往低处观察,都容易把目标测近了。
应根据各种具体情况,经过艰苦练习,反复体会,摸出自己的经验。俗话说:"熟能生巧",练得多,体会深,经验丰富了,就能比较准确地目测出物体的距离来。
3.用步枪测
我们手中的半自动步枪、冲锋枪、轻机枪等,都是消灭敌人的武器;可是在简易测绘上又有它的新用途,它既是武器又是一具出色的测距"仪器",使用起来迅速方便。在你对敌人射击,进行瞄准的同时,就能测出距离来,这对于选定标尺分划和瞄准点来说,是非常及时适用的。
武器怎么还能测量距离呢?
这是根据准星的宽度能遮盖目标的情况计算出来的,所以叫准星覆盖法。工厂里制造武器,都是有一定尺寸的,如准星的宽度是2毫米,瞄准时眼睛到准星的距离,各种武器都可以直接量出(如半自动步枪为74厘米)。目标(主要是人体)的宽度一般是50厘米。这样,根据相似三角形成比例的道理,就可以计算出各种武器在不同距离上准星宽度与目标(人体)宽度的关系。根据计算,当准星宽度恰好能遮住一个人体时,各咱武器的距离分别是:半自动步枪200米,冲锋枪160米,轻机枪170米;若遮住半个人体,就是它们距离的一半,即100米、80米和85米;若准星的一半就能遮住一个人体,那就是它们距离的一倍,即400米、320米和340米了。所以,只要记住准星遮盖目标的情况,就能立即估出距离来。
4.用指北针测
指北针不但能给东西南北方向,还能告诉你到目标的距离。
工厂在设计制造指北针时,就已经考虑到用它测量距离的问题了。打开指北针,你马上就能发现有准星、照门。准星座两侧尖端的宽度恰好是准星座到照门距离的十分之一。准星座就是估计判定距离的,所以叫"距离估定器"。
测量距离时,将指北针放平,用右眼通过照门、准星观察目标,记住距离估定器照准现地的宽度,然后目测现地的宽度,并将该宽度乘以10,就是到目标的距离。若目标太窄也可以用估定器的一半照准,则应乘以20。
例如,测得敌坦克约为估定器的一半,已知敌坦克长约7米,则可以算出到坦克的距离为:7米×20=140米。
5.用臂长尺测
人都有一双胳臂,如果问他:你的臂有多长?他可能摇头说没量过。若要再问"臂长尺"是怎么回事?恐怕就更无法回答了。这是因为他还不知道自己的胳臂还能测距离。其实,说开了,臂长尺就是一支刻有分划的铅笔(或木条)。可是和手臂一结合起来,就变成一具非常灵活方便的测距"仪器"了。
铅笔上的分划,是按每个人臂长(手臂向前平伸,从眼睛到拇指虎口的距离)的百分之一为一个分划刻画的,所以叫臂长尺。比如,某人的臂长是60厘米,那么臂长尺上的一个分划就是6毫米。有了臂长尺,只要事先知道目标的大小,就可以用臂长尺测出距离。
那么距离是怎样计算的呢?前面已经说过,臂长尺上的每个分划是臂长的百分之一,如果目标的高度(或宽度)占一个分划时,也正好是距离的百分之一,占两个分划,就是百分之二。这样,根据相似三角形成比例的道理,距离:目标高度(间隔)=100(臂长)∶分划数(臂长尺),就可以得出求距离的公式:
距离=高度(间隔)×100分划数
例如:测得前方电话线杆的一个间隔,约5个分划,我们知道一般电话线杆间隔是50米,那么到电线杆的距离是:
50米×100=1000米。