当前位置:文档之家› 机器学习中的距离与相似度度量

机器学习中的距离与相似度度量

由于 是实对角阵,所以 U 是一个正交矩阵,因此
。 第 10 页
一个样本点
到重心点
马氏距离。等价于求压缩后的坐标系中该样本点
坐标系里重心点
的欧式距离。因此:
的 到压缩后的
如果 x 是列向量,那么:
如果并把上文中的重心点
改为任意一个其它的样
本点 y,则可以得到 x 和 y 两个样本点之间的马氏距离公式为:
想象你在曼哈顿要从一个十字路口 开车到另外一个十字路口,
驾驶距离是两点间的直线距离吗? 显然不是,除非你能穿越大楼。 实际驾驶距离就是这个“曼哈顿距离”
【上图中,绿色线代表的是欧氏距离,其余红黄蓝三条线代表的都是曼哈顿距离。】 二维平面两点 a(x1,y1)与 b(x2,y2)间的曼哈顿距离:
两个 n 维向量 a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的曼哈顿距离:
3. # solution1
4. def StaEucDistance1(vec1, vec2):
5.
sk=np.var(np.vstack([vec1, vec2]),axis=0,ddof=1)
6.
# ddof=0 provides a maximum likelihood estimate of the variance
两个 n 维向量 a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的欧氏距离:
也可以用表示成向量运算的形式:
欧氏距离计算代码:
1. import numpy as np
2. from scipy.spatial.distance import pdist
3. # solution1
曼哈顿距离计算代码:
1. import numpy as np
2. from scipy.spatial.distance import pdist
3. # solution1
4. def ManhDistance1(vec1, vec2):
5.
dist = np.sum(np.abs(vec1 - vec2))
因为计算是基于各维度的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度 级别。例如房价预测问题中,房屋的面积(m2)和房间数量(个),如果直接使用欧氏距离可 能使结果具有极大偏差,因此,对于维度为不同单位的距离测量,使用时可进行标准化 (归一化)处理。
假设样本集 X 的均值(mean)为 m,标准差(standard deviation)为 s,那么 X 的“标准化变量”表示为:
换言之,除非正好
,否则我们一定有:
,
第4页
那么,究竟分母应该设置为多少呢? 继续推导:
因此,当
时,无偏的方差估计为:
那么无偏的标准差估计为:
第5页
二、曼哈顿距离
出租车几何(Taxicab geometry)曼哈顿距离(Manhattan Distance)是由十九世 纪的赫尔曼·闵可夫斯基所创词汇,用以标明两个点在标准坐标系上的绝对轴距总和。
标准化后的值 = ( 标准化前的值 - 分量的均值 ) / 分量的标准差(无偏)
经过推导就可以得到两个 n 维向量 a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的标
准化欧氏距离的公式:
标准欧氏距离计算代码:
1. import numpy as np
2. from scipy.spatial.distance import pdist
两个 n 维变量 a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的闵可夫斯基距离定义为:
也可写成
当 p=1 时,就是曼哈顿距离 当 p=2 时,就是欧氏距离 当 p→∞时,就是切比雪夫距离 根据变参数的不同,闵氏距离可以
表示一类的距离。
闵可夫斯基距离计算代码: dist = pdist(np.vstack([vec1, vec2]),metric='minkowski', p=3) [scipy.spatial.distance] 第8页
15.
16.p = np.array([1,2,3,4])
17.q = np.array([9,8,7,6])
18. print(EucDistance1(p,q))
19. print(EucDistance2(p,q))
20. print(EucDistance3(p,q))
第2页
标准化欧氏距离 (Standardized Euclidean distance )
6.
return dist
7. #solution2
8. def ChebyDistance2(vec1, vec2):
9.
dist = pdist(np.vstack([vec1, vec2]),metric='chebyshev')
10. return dist[0] # type(dist) == ndarray
7.
#
for normally distributed variables.
8.
# ddof=1 provides an unbiased estimator of the variance
9.
#
of a hypothetical infinite population.
10. dist = np.sqrt(np.sum(np.square(vec1 - vec2)/sk))
16.
17.p = np.array([1,2,3,4])
18.q = np.array([9,8,7,6])
19. print(StaEucDistance1(p,q))
20. print(StaEucDistance2(p,q))
这里使用的是无偏差的标准差(ddof = 1)公式为:
第3页
为什么样本方差(sample variance)的分母是 N-1?
11.
12.p = np.array([1,2,3,4])
13.q = np.array([9,8,7,6])
14. print(ManhDistance1(p,q))
15. print(ManhDistance2(p,q))
第6页
三、切比雪夫距离
切比雪夫距离(Chebyshev Distance)的定义是其各坐标数值差绝对值的最大值。
国际象棋棋盘上两个位置之间 的切比雪夫距离,给出了国王需要 在它们之间移动的最少移动次数。
国王可以上下左右移动, 也可以对角地移动。
二维平面两点 a(x1,y1)与 b(x2,y2)间的切比雪夫距离: 两个 n 维向量 a(x11,x12,…,x1n)与 b(x21,x22,…,x2n)间的切比雪夫距离: 这个公式的另一种等价形式:
目录 − 欧几里得距离 − 曼哈顿距离 − 切比雪夫距离 − 闵可夫斯基距离 − 马氏距离 − 余弦距离 − 皮尔逊相关系数 − 杰卡德相似系数 − 汉明距离 − 信息熵 − Reference
第1页
一、欧几里得距离
欧几里得度量(Euclidean metric)(也称欧氏距离)是最易于理解的一种距离计 算方法,源自欧氏空间中两点间的距离公式,指在 m 维空间中两个点之间的真实距离, 或者向量的自然长度(即该点到原点的距离),在二维和三维空间中的欧氏距离就是两点 之间的实际距离。 二维平面上两点 a(x1,y1)与 b(x2,y2)间的欧氏距离:
11.
12.p = np.array([1,2,3,4])
13.q = np.array([9,8,7,6])
14. print(ChebyDistance1(p,q))
15. print(ChebyDistance2(p,q))
第7页
四、闵可夫斯基距离
闵可夫斯基距离(Minkowski Distance)(闵氏距离)不是一种距离,而是一组距 离的定义。
马氏距离优缺点: 优点: 1. 不受量纲的影响,两点之间的马氏距离与原始数据的测量单位无关,由标准化数据和
其中每一行表示一个测试样本(共 n 个)每一列表示样本的一个维度(共 m 个) 以列向量形式表示为: 样本的总体均值为: 其协方差为:
假设将原始数据集 X 通过坐标旋转矩阵 U 旋转到新的坐标系中得到 F,那么
由于将数据集旋转后数据的各维度之间是不相关的, 新数据集 F 的均值记为 其协方差为:
其中每个 λi 就是每个维度值的方差。
五、马氏距离
使用闵氏距离时,当变量之间的尺度不一样时,会造成很大的误差。很多情况下,需 要使用归一化对它进行处理。如果不同维度之间具有相关性时,归一化的效果就不好了。 如下图只在 X 轴和 Y 轴归一化,则达不到很好的效果。
要想达到很好的效果,理想的正则化方法是沿 45°-135°方向对数据缩放(正则化), 因此,印度统计学家马哈拉诺比斯(P. C. Mahalanobis)提出了马氏距离(Mahalanobis Distance)。
马氏距离是欧氏距离的一种推广,它通过协方差来计算两点之间距离,是一种有效的 计算两个未知样本集的相似度的方法。马氏距离分为两个步骤:
1、坐标旋转:使旋转后的各个维度之间线性无关,该旋转过程就是主成分分析过程。
2、数据压缩:所以将不同的维度上的数据压缩成为方差都是 1 的数据集。 计算公式:
一个多元向量
11. return dist
12.# solution2
13.def StaEucDi dist = pdist(np.vstack([vec1, vec2]),metric='seuclidean')
15. return dist[0] # type(dist) == ndarray
相关主题