关于相似性度量与各类距离的意义
两个向量之间的距离计算,在数学上称为向量的距离,也称为样本之间的相似性度量(Similarity Meansurement)。它反映为某类事物在距离上接近或远离的程度。
范数
- 闵可夫斯基距离
- 欧氏距离
- 曼哈顿距离
- 切比雪夫距离
- 夹角余弦
- 海明距离
- 杰卡德相似系数
特征间的相关性
- 相关系数与相关距离
- 马氏距离
范数
在数学的学习,我们肯定都接触过范数的这个概念,下面是对范数的介绍:
范数:向量的范数可以简单、形象地理解为向量的长度,或者向量到坐标原点的距离,或者相应空间内的两点之间的距离。
向量的范数定义:向量的范数是一个函数||x||,满足非负性||x||>=0,齐次性||cx||=|c| ||x||,三角不等式||x+y||<=||x||+||y||。
下面是对范数的解释:
L1范数:||x||为x向量各个元素绝对值之和。
L2范数:||x||为x向量各个元素平方和的开方。L2范数又称Euclidean范数或者Frobenius范数。
Lp范数:||x||为x向量各个元素绝对值p次方和的1/p次方。
L∞范数:||x||为x向量各个元素绝对值最大的那个元素,如下:
向量范数的运算(使用线性代数库linalg):
b = [2, 6, 4]
a1 = np.linalg.norm(b) # 当p值不指定时,默认值为2,为L2范数
a2 = np.linalg.norm(b, 1)
a3 = np.linalg.norm(b, 2)
a4 = np.linalg.norm(b, 3)
a5 = np.linalg.norm(b, np.inf)
print(a1)
print(a2)
print(a3)
print(a4)
print(a5)
结果为:
7.48331477355
12.0
7.48331477355
6.60385449779
6.0Process finished with exit code 0
闵可夫斯基距离(Mindkowski Distance)
严格意义上讲,闵可夫斯基距离不是一种距离,而是一组距离的定义。
两个n维变量A(x11, x12, ..., x1n)与B(x21, x22, ..., x2n)间的闵可夫斯基距离定义为:
其中p是一个变参数。
- 当p=1时,就是曼哈顿距离。
- 当p=2时,就是欧氏距离。
- 当p—>∞时,就是切比雪夫距离。
根据变参数的不同,闵可夫斯基距离可以表示一类的距离。
欧式距离(Euclidean Distance)
欧式距离可以理解为L2范数。
(1)二维平面上两点a(x1, y1)与b(x2, y2)间的欧氏距离:
(2)三维空间两点A(x1, y1, z1)与B(x2, y2, z2)间的欧式距离:
(3)两个n维向量A(x11, x12, ..., x1n)与B(x21, x22, ..., x2n)间的欧式距离:
表示向量运算的形式:
用程序实现欧式距离:
import numpy as np
vectorA = np.mat([3, 4, 7])
vectorB = np.mat([3, 8, 5])
print(np.sqrt((vectorA-vectorB)*(vectorA-vectorB).T))
结果为:
[[ 4.47213595]]Process finished with exit code 0
曼哈顿距离(Manhattan Distance)
曼哈顿距离可以理解为L1范数
曼哈顿距离的命名原因是从规划为方型建筑区块的城市(如曼哈顿)间,最短的行车路径而来(忽略曼哈顿的单向车道以及只存在于3、14大道的斜向车道)。任何往东三区块、往北六区块的的路径一定最少要走九区块,没有其他捷径。
(1)二维平面两点A(x1, y1)与B(x2, y2)间的曼哈顿距离:
(2)两个n维向量A(x11, x12, ..., x1n)与B(x21, x22, ..., x2n)间的曼哈顿距离:
程序实现曼哈顿距离:
import numpy as np
vectorA = np.mat([3, 4, 7])
vectorB = np.mat([3, 8, 5])
print(np.sum(np.abs(vectorA-vectorB)))
结果为:
6Process finished with exit code 0
切比雪夫距离(Chebyshev Distance)
在国际象棋中,国王走一步能够移动到相邻的8个方格中的任意一个。国王从格子(x1, y1)走到格子(x2, y2)最少需要的步数总是max(|x2-x1|, |y1-y2)步。该距离度量的方法与切比雪夫距离类似,切比雪夫距离相当于L∞范数。
(1)二维平面两点A(x1, y1)与B(x2, y2)间的切比雪夫距离:
(2)两个n维向量A(x11, x12, ..., x1n)与B(x21, x22, ..., x2n)间的切比雪夫距离:
这个公式的另一种等价形式是:
程序实现切比雪夫距离:
import numpy as np
vectorA = np.mat([3, 4, 7])
vectorB = np.mat([3, 8, 5])
print(np.max(np.abs(vectorA-vectorB)))
结果为:
4Process finished with exit code 0
夹角余弦(Cosine)
在几何中,夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。
(1)在二维空间中向量A(x1, y1)与向量B(x2, y2)的夹角余弦公式:
(2)两个n维样本点A(x11, x12, ..., x1n)与B(x21, x22, ..., x2n)的夹角余弦:类似地,对于两个n维样本点A(x11, x12, ..., x1n)与B(x21, x22, ..., x2n), 可以使用类似于夹角余弦的概念来衡量它们之间的相似程度。
夹角余弦取值范围为[-1, 1]。夹角余弦越大,表示两个向量的夹角越小;夹角余弦越小,表示两个向量的夹角越大。当两个向量的方向重合时,夹角余弦取最大值1;当两个向量的方向完全相反时,夹角余弦取最小值-1。
程序实现:
import numpy as np
vectorA = np.array([3, 4, 7])
vectorB = np.array([3, 8, 5])
cosV = np.dot(vectorA, vectorB)/(np.linalg.norm(vectorA)*np.linalg.norm(vectorB))
print(cosV)
结果为:
0.892451645372Process finished with exit code 0
海明距离(Hamming Distance)
在信息编码中,两个合法代码对应位上编码不同的位数称为码距,又称海明距离。
例如:字符串“1111”与“1001”之间的海明距离为2。
主要应用在信息编码,为了增强容错性,应使得编码间的最小Hamming Distance尽可能大。
程序实现:
import numpy as np
vectorA = np.mat([1, 0, 1, 0, 1, 1, 1, 0])
vectorB = np.mat([0, 1, 1, 1, 0, 0, 1, 0])non = np.nonzero(vectorB-vectorA)
print(len(non[0]))
结果为:
5Process finished with exit code 0
杰卡德相似系数(Jaccard Similarity Coefficient)
(1)杰卡德相似系数:两个集合A和B的交集元素在A、B的并集中所占的比例称为两个集合的杰卡德相似系数。
杰卡德相似系数是衡量两个集合的相似度的一种指标,可用在衡量样本的相似度上。
(2)杰卡德距离:与杰卡德相似系数相反的概念是杰卡德距离(Jaccard Distance)。
杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。
程序实现(使用scipy中的距离函数):
import numpy as np
import scipy.spatial.distance as dist
vectorA = [1, 0, 1, 0, 1, 1, 1, 0]
vectorB = [0, 1, 1, 1, 0, 0, 1, 0]
# A∪B为[1, 1, 1, 1, 1, 1, 1, 0] 和为7
# A∩B为[0, 0, 1, 0, 0, 0, 1, 0] 和为2
vector = np.mat([vectorA, vectorB])
print(dist.pdist(vector, metric='jaccard'))
结果为:
[ 0.71428571]Process finished with exit code 0
特征间的相关性
相关系数(Correlation Coefficient)与相关距离(Correlation Distance)
(1)相关系数的定义:
相关系数是衡量两个特征列之间相关程度的一种方法,其取值范围是[-1, 1]。相关系数的绝对值越大,表明特征列X与Y的相关度越高。当X与Y线性相关时,相关系数取值为1(正线性相关)或-1(负线性相关)。
(2)相关距离的定义:
相关系数的程序实现:
import numpy as np
vector1 = [2639, 1881, 1542, 1529, 2730, 2042, 2045, 1807, 2111, 1916, 2110, 1541, 1634, 1477, 2197, 1886, 1783,1625, 1521, 1146, 865, 2229, 1651, 1399, 1760, 1362, 1789, 1631, 1512, 1876, 2031] # 衣着消费
vector2 = [3696, 2254, 1204, 1506, 1972, 1844, 1643, 1217, 3724, 3078, 2997, 1933, 2105, 1487, 1656, 1525, 1652,1738, 2954, 1626, 1320, 1471, 1587, 1396, 1434, 550, 2079, 1388, 1097, 1516, 1281] # 文教娱乐消费
v1_mean = np.mean(vector1)
v2_mean = np.mean(vector2)dv1 = np.std(vector1)
dv2 = np.std(vector2)
corref = np.mean(np.multiply(vector1-v1_mean, vector2-v2_mean))/(dv1*dv2)
print(corref)
# 使用Numpy相关系数得到相关系数矩阵
print(np.corrcoef(vector1, vector2))
结果为:
0.470486874287
[[ 1. 0.47048687][ 0.47048687 1. ]]
相关系数矩阵的含义是:如果把第一个特征列作为参照数据(自己与自己的相关系数为1),那么第二个与第一个的相关程度是47%。
马氏距离(Mahalanobis Distance)
(1)马氏距离的定义:有M个样本向量X1~Xm,协方差矩阵记为S,均值记为向量μ,则其中样本向量X到μ的马氏距离表示为:
它是用坐标差平方除以方差(或者说乘以方差的倒数),从而转化为无量纲数的,推广到多维就是要乘以协方差阵的逆矩阵,这就是马氏距离的概念。
而其中向量Xi与Xj之间的马氏距离定义为:
若协方差矩阵时单位矩阵(各个样本向量之间独立同分布),则公式变成了欧式距离公式:
若协方差矩阵是对角矩阵,则公式变成了标准化欧式距离公式。
(2)马氏距离的优点:与量纲无关,排除变量之间的相关性的干扰。
程序实现:
import numpy as np
vector1 = [2639, 1881, 1542, 1529, 2730, 2042, 2045, 1807, 2111, 1916, 2110, 1541, 1634, 1477, 2197, 1886, 1783,1625, 1521, 1146, 865, 2229, 1651, 1399, 1760, 1362, 1789, 1631, 1512, 1876, 2031] # 衣着消费
vector2 = [3696, 2254, 1204, 1506, 1972, 1844, 1643, 1217, 3724, 3078, 2997, 1933, 2105, 1487, 1656, 1525, 1652,1738, 2954, 1626, 1320, 1471, 1587, 1396, 1434, 550, 2079, 1388, 1097, 1516, 1281] # 文教娱乐消费
vector = np.mat([vector1, vector2])S_1 = np.linalg.inv(np.cov(vector))
v = vector.T[0] - vector.T[1]
distMa = np.sqrt(np.dot(np.dot(v, S_1), v.T))
print(distMa)
结果为:
[[ 2.27405171]]Process finished with exit code 0
参考:
1.机器学习算法原理与编程实践/郑捷著. 北京:电子工业出版社,2015.11
转载于:https://my.oschina.net/u/3888421/blog/2231617
关于相似性度量与各类距离的意义相关推荐
- 向量空间中各类距离的意义
标签: 数学基础 闵可夫斯基距离 欧氏距离Euclidean Distance 曼哈顿距离Manhattan Distance 切比雪夫距离Chebyshev Distance 夹角余弦Cosine ...
- Python 计算各类距离
原文:https://blog.csdn.net/qq_19707521/article/details/78479532 Python Numpy计算各类距离 详细: 1.闵可夫斯基距离(Minko ...
- python公式计算_Python Numpy计算各类距离的方法
详细: 1.闵可夫斯基距离(Minkowski Distance) 2.欧氏距离(Euclidean Distance) 3.曼哈顿距离(Manhattan Distance) 4.切比雪夫距离(Ch ...
- 相似性度量的各种距离(Distance)计算归类详解及应用(强烈建议收藏!!!备用)
Distance Classification Distance 欧氏距离(Euclidean Distance) 闵可夫斯基距离(Minkowski distance) 曼哈顿距离(Manhatta ...
- 常见相似性度量及各种距离
工程上的很多问题,比如最经典的最小二乘法.聚类问题.分类问题.视觉中的立体匹配以及图像检索等等,都要涉及到比较两个向量或者集合或者概率分布的相似程度,而比较相似程度又可以转化为比较它们之间两两的距离, ...
- 相似性度量:机器学习距离公式总结
机器学习中,我们经常会对两个样本之间的相似度进行度量,此时会用到各种距离公式来反映某类事物在距离上接近或者远离的程度,K近邻算法,K-means聚类算法也涉及到距离公式的选择问题,今天我们就来总结一下 ...
- python 各类距离公式实现
所列的距离公式列表和代码如下: 闵可夫斯基距离(Minkowski Distance) 欧氏距离(Euclidean Distance) 曼哈顿距离(Manhattan Distance) 切比雪夫距 ...
- python公式计算两点距离并输出_Python Numpy计算各类距离的方法
详细: 1.闵可夫斯基距离(Minkowski Distance) 2.欧氏距离(Euclidean Distance) 3.曼哈顿距离(Manhattan Distance) 4.切比雪夫距离(Ch ...
- [369]python各类距离公式实现
文章目录 1. 闵可夫斯基距离(Minkowski Distance) 2.欧氏距离(Euclidean Distance) 3.曼哈顿距离(Manhattan Distance) 4.切比雪夫距离( ...
最新文章
- 请给SpringBoot多一些内存
- R语言使用dplyr包使用group_by函数、summarise函数和mutate函数计算分组下的均值、标准差、样本个数、以及分组均值的95%执行区间对应的下限值和上限值(Calculate CI)
- 为了孩子上名校,他们发论文给子女署名,Nature发文报道韩国学术不当行为
- window7 telnet localhost 5554
- python取百位数个位数_使用Python把数值形式的金额变成人类可读形式
- MySQL数据库的优化
- 推荐一个Python终身学习者
- 火山引擎进军云市场,计划未来三年服务十万客户
- 用c语言elgamal共密钥密码加密算法,非对称密钥体制RSA加密原理
- Linux命令:more
- Matlab DIP(瓦)ch5图像复原练习
- Android7.0(Android N)适配教程,心得
- 编译g2o提示错误 error: ‘ScalarBinaryOpTraits’ is not a class template
- Redis——Redis事务性原理
- QA要具备的七大能力
- 途客圈创业记--读书笔记
- 在PHP中如何获取用户的真实IP
- 超详细!个人网盘搭建教程
- 因特尔又要加入手机芯片市场了
- 【Leetcode】286. Walls and Gates