数学基础学习笔记:向量运算基础--向量距离

在机器学习里,我们的运算一般都是基于向量的,一条用户具有100个特征,那么他对应的就是一个100维的向量,通过计算两个用户对应向量之间的距离值大小,有时候能反映出这两个用户的相似程度。这在后面的KNN算法和K-means算法中很明显。

设有两个n维变量A=\left[ x_{11}, x_{12},...,x_{1n} \right]B=\left[ x_{21} ,x_{22} ,...,x_{2n} \right],则一些常用的距离公式定义如下:

1、曼哈顿距离

曼哈顿距离也称为城市街区距离,数学定义如下:

d_{12} =\sum_{k=1}^{n}{\left| x_{1k}-x_{2k} \right| }

曼哈顿距离的Python实现:

from numpy import *
vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print sum(abs(vector1-vector2))

2、欧氏距离

欧氏距离其实就是L2范数,数学定义如下:

d_{12} =\sqrt{\sum_{k=1}^{n}{\left( x_{1k} -x_{2k} \right) ^{2} } }

欧氏距离的Python实现:

from numpy import *
vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print sqrt((vector1-vector2)*(vector1-vector2).T)

3、闵可夫斯基距离

扫描二维码关注公众号,回复: 4839014 查看本文章

从严格意义上讲,闵可夫斯基距离不是一种距离,而是一组距离的定义:

d_{12} =\sqrt[p]{\sum_{k=1}^{n}{\left( x_{1k} -x_{2k} \right) ^{p} } }

实际上,当p=1时,就是曼哈顿距离;当p=2时,就是欧式距离。

4、切比雪夫距离

切比雪夫距离就是L_{\varpi},即无穷范数,数学表达式如下:

d_{12} =max\left( \left| x_{1k}-x_{2k} \right| \right)

切比雪夫距离额Python实现如下:

from numpy import *
vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print sqrt(abs(vector1-vector2).max)

5、夹角余弦

夹角余弦的取值范围为[-1,1],可以用来衡量两个向量方向的差异;夹角余弦越大,表示两个向量的夹角越小;当两个向量的方向重合时,夹角余弦取最大值1;当两个向量的方向完全相反时,夹角余弦取最小值-1。

机器学习中用这一概念来衡量样本向量之间的差异,其数学表达式如下:

cos\theta =\frac{AB}{\left| A \right| \left|B \right| } =\frac{\sum_{k=1}^{n}{x_{1k}x_{2k} } }{\sqrt{\sum_{k=1}^{n}{x_{1k}^{2} } } \sqrt{\sum_{k=1}^{n}{x_{2k}^{2} } } }

夹角余弦的Python实现:

from numpy import *
vector1 = mat([1,2,3])
vector2 = mat([4,5,6])
print dot(vector1,vector2)/(linalg.norm(vector1)*linalg.norm(vector2))

6、汉明距离

汉明距离定义的是两个字符串中不相同位数的数目。

例如:字符串‘1111’与‘1001’之间的汉明距离为2。

信息编码中一般应使得编码间的汉明距离尽可能的小。

汉明距离的Python实现:

from numpy import *
matV = mat([1,1,1,1],[1,0,0,1])
smstr = nonzero(matV[0]-matV[1])
print smstr

7、杰卡德相似系数

两个集合A和B的交集元素在A和B的并集中所占的比例称为两个集合的杰卡德相似系数,用符号J(A,B)表示,数学表达式为:

J\left( A,B \right) =\frac{\left| A\cap B\right| }{\left|A\cup B \right| }

杰卡德相似系数是衡量两个集合的相似度的一种指标。一般可以将其用在衡量样本的相似度上。

8、杰卡德距离

与杰卡德相似系数相反的概念是杰卡德距离,其定义式为:

J_{\sigma} =1-J\left( A,B \right) =\frac{\left| A\cup B \right| -\left| A\cap B \right| }{\left| A\cup B \right| }

杰卡德距离的Python实现:

from numpy import *
import scipy.spatial.distance as dist
matV = mat([1,1,1,1],[1,0,0,1])
print dist.pdist(matV,'jaccard')

猜你喜欢

转载自blog.csdn.net/weixin_37805635/article/details/85995796
今日推荐