标签: 数学基础
1. 闵可夫斯基距离
严格意义上讲,闵可夫斯基距离不是一种距离,而是一组距离的定义。
两个n维变量 A(x11,x12,⋅⋅⋅,x1n) 与 B(x21,x22,⋅⋅⋅,x2n) 间的闵可夫斯基距离的定义为:
- [ ] 当p=1时,就是曼哈顿距离。
- [ ] 当p=2时,就是欧式距离。
- [ ] 当 p→∞ 时,就是切比雪夫距离。
2. 欧氏距离(Euclidean Distance)
欧式距离(L2范数)是最易于理解的一种距离计算方法,源自欧式空间中两点间的距离公式: dist(A,B)
(1)二维平面上两点 a(x1,y1) 与 b(x2,y2) 间的欧式距离:
(2)三维空间间两点 A(x1,y1,z1) 与 B(x2,y2,z2) 间的欧式距离:
(3)两个 n 维向量
(4)Python实现欧式距离
from numpy import *
vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print sqrt((vector1-vector2)*(vector-vector).T))
3. 曼哈顿距离(Manhattan Distance)
从名字就可以猜出这种距离的计算方法。想象你在曼哈顿要从一个十字路口来车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。实际驾驶距离就是这个“曼哈顿距离”(L1范数),而这也是曼哈顿距离名称的来源。曼哈顿距离也称为城市街区距离(City Block distance)
(1)二维平面两点
A(x1,y1)
与
B(x2,y2)
间的曼哈顿距离:
(2)两个 n 维向量
(3)Python实现曼哈顿距离
from numpy import *
vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print sum(abs(vector1-vector2))
4. 切比雪夫距离(Chebyshev Distance)
国际象棋中,国王走一步能够移动到相邻的8个方格中的任意一个。那么国王从格子
(x1,y1)
走到格子
(x2,y2)
最少需要多少步?最少步数总是
max(|x2−x1|,|y2−y1|)
步。有一种类似的距离度量方法叫作切比雪夫距离(
L∞
范数)。
(1)二维平面两点
A(x1,y1)
与
B(x2,y2)
间的切比雪夫距离:
(2)两个 n 维向量
from numpy import *
vector1 = mat([1,2,3])
vector2 = mat([4,7,5])
print abs(vector1-vector2).max()
5. 夹角余弦(Cosine)
几何中的夹角余弦可用来衡量两个向量方向的差异,机器学习中借用这一概念来衡量样本向量之间的差异。
(1)在二维空间中向量
A(x1,y1)
与向量
B(x2,y2)
的夹角余弦公式:
(2)两个 n 维样本点
夹角余弦取值范围为[-1,1]。夹角余弦越大,表示两个向量的夹角越小;夹角余弦越小,表示两个向量的夹角越大。当两个向量的方向重合时,夹角余弦取最大值1;当两个向量方向完全相反时,夹角余弦取最小值-1
from numpy import *
vector1 = mat([1,2,3])
vector2 = mat([4,7,5])
cosV12 = dot(vector1,vector2.T)/(linalg.norm(vector1)*linale.norm(vector2))
print cosV12
6. 汉明距离(Hamming Distance)
(1)汉明距离的定义:两个等长字符串s1与s2之间的汉明距离定义为将其中一个变为另外一个所需要的最小替换次数。例如字符串“1111”与“1001”之间的汉明距离为2.
应用:信息编码(为了增强容错性,应使得编码间的最小汉明距离尽可能大)
(2)Python实现汉明距离
from numpy import *
matV = mat([[1,1,0,1,0,1,0,0,1],[0,1,1,0,0,0,1,1,1]])
'''
nonzero函数把非零值的索引分别存储为行和列,如以下smstr的结果为
(matrix([[0, 0, 0, 0, 0, 0]], dtype=int64), # 表示非零值都在第0行
matrix([[0, 2, 3, 5, 6, 7]], dtype=int64)) # 表示各个非零值所在的列
'''
smstr = nonzero(matV[0]-matV[1])
print shape(smstr[0])[1] # 获取smstr第0行的数组然后计算出他的行列数,所取的列数即为汉明距离
7. 杰卡德相似系数(Jaccard Similarity Coefficient)
(1)杰卡德相似系数:两个集合
A
和
(2)杰卡德距离:与杰卡德相似系数相反的概念是杰卡德距离(Jaccard Distance),杰卡德距离可用如下公式表示:
(3)杰卡德相似系数与杰卡德距离的应用。
可将杰卡德相似系数用在衡量样本的相似度上。
样本 A 与样本
p: 样本 A 与
q: 样本 A 是1、样本
r: 样本 A 是0、样本
s: 样本 A 与
那么样本 A 与
(4)Python实现杰卡德距离。
from numpy import *
import scipy.spatial.distance as dist # 导入SciPy距离公式
matV = mat([[1,1,0,1,0,1,0,0,1],[0,1,1,0,0,0,1,1,1]])
print "dist.jaccard:",dist.pdist(matV,'jaccard')