对象是指含有一组特征的行向量,一个特征表示为矩阵中的一列。
1. 相似性度量
两个向量之间的距离(此时向量最为n维坐标系中的点)计算,在数学上称为向量的距离,也可以称为样本间的相似性度量,它反映某类事物在距离上接近或远离的程度。
在介绍向量间的各类距离公式前,先介绍下范数的概念:
范数:向量的范数可以简单理解为向量的长度,或者向量到坐标系原点的距离,或者相应空间内的两点之间的距离。
L1范数: ||x||为x向量各元素绝对值之和
L2范数:||x||2 为x向量元素平方和的开方,(又称作Euclidean范数或者Frobenius范数)
Lp范数:||x||p为x向量各个元素绝对值p次方和的1/p次方
L∞范数: ||x||∞为向量各个元素绝对值最大的那个元素
2. 各类距离的意义和Python实现
- 闽可夫斯基距离
严格上来说,闽可夫斯基是一组距离:
两个n为变量A(x11,x12,....,x1n)和B(x21,x22,....,x2n)间的闽可夫斯基距离为:
其中,当p=1时,为曼哈顿距离。p=2时,为欧式距离。p=无穷时,为切比雪夫距离
- 欧式距离
欧式距离是最常见也是最容易理解的一类距离:
两个n为变量A(x11,x12,....,x1n)和B(x21,x22,....,x2n)间的欧式距离为:
表示为向量运算形式:
- 曼哈顿距离
曼哈顿距离:比如开车从一个街区到另一个街区,实际上走的距离就是曼哈顿距离(L1范数)。
两个n为变量A(x11,x12,....,x1n)和B(x21,x22,....,x2n)间的曼哈顿距离为:
- 切比雪夫距离
两个n为变量A(x11,x12,....,x1n)和B(x21,x22,....,x2n)间的契比雪夫距离为:
另一种等价形式:
- 夹角余弦
几何中的夹角余弦可以用来衡量两个方向向量之间的差异,在机器学习中借用这一概念来很衡量样本向量之间的差异。
在二维中,向量A(x1,y1)和B(x2,y2)的夹角余弦:
两个n为变量A(x11,x12,....,x1n)和B(x21,x22,....,x2n)间的夹角余弦:
夹角余弦取值范围[-1, 1],夹角余弦越大,表示两个向量的夹角越小,两个向量距离越近。
#! usr/bin/env python
# -*- coding : utf-8 -*-
"""
相似性度量
范数: 简单来说范数了理解为向量的长度,或者向量到原点的距离,或者相应空间内两点之间的距离
各类距离:
闽可夫斯基距离、欧式距离、曼哈顿距离、切比雪夫距离、汉明距离、杰卡德相似系数
"""
import numpy as np
def E_Dist(X, Y):
'欧式距离,输入为两个矩阵形式'
# import numpy as np
return np.sqrt((X - Y) * (X - Y).T)
def M_Dist(X, Y):
'曼哈顿距离(L1范数), 如从一点开车去另一点的实际距离(街区距离)'
return np.sum(np.abs(X - Y))
def C_Dist(X, Y):
'切比雪夫距离(L无穷范数),两个n维点X(x_11, x_12,,,,x_1n) 和 Y , 切比雪夫距离:max(|x_1i - x_2i|)'
return np.abs(X - Y).max()
def Cosin_Dist(X, Y):
'夹角余弦'
return np.sum(np.multiply(A, B))/(np.linalg.norm(X) * np.linalg.norm(Y)) # multiply矩阵点乘
if __name__ == '__main__':
A = np.mat([1, 2, 3])
B = np.mat([4, 7, 5])
print('欧式距离: ', E_Dist(A, B))
print('曼哈顿距离: ', M_Dist(A, B))
print('夹角余弦: ', Cosin_Dist(A, B))
输出:
欧式距离: [[ 6.164414]]
曼哈顿距离: 10
夹角余弦: 0.929669680201