欧氏距离(也称欧几里得度量)指在m维空间中两个点之间的真实距离,或者向量的天然长度(即该点到原点的距离)
$$dist(A,B)=\sqrt{\sum_{i=1}^n(A_i-B_i)^2}$$html
import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) d = np.linalg.norm(vec1-vec2, ord=2) # 或者 d = np.sqrt(np.sum(np.square(vec1-vec2)))
在欧几里得空间的固定直角坐标系上两点所造成的线段对轴产生的投影的距离总和
$$dist(A,B)=\sum_{i=1}^n|A_i-B_i|$$python
import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) d = np.linalg.norm(vec1-vec2, ord=1) # 或者 d = np.sum(np.abs(vec1-vec2))
切比雪夫距离(Chebyshev distance)是向量空间中的一种度量,二个点之间的距离定义为其各座标数值差的最大值
$$dist(A,B)=\max_i|A_i-B_i|$$
or
$$dist(A,B)=\lim_{p→\infty}(\sum_{i=1}^n|A_i-B_i|^p)^{\frac{1}{p}}$$git
import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) d = np.linalg.norm(vec1-vec2, ord=np.inf) # 或者 d = np.abs(vec1-vec2).max()
欧氏空间中的一种测度,被看作是欧氏距离和曼哈顿距离的一种推广
$$dist(A,B)=\sqrt[p]{\sum_{i=1}^n|A_i-B_i|^p}$$github
import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) """ ord=1: 一范数 ord=2: 二范数 ord=np.inf: 无穷范数 """ d = np.linalg.norm(vec1-vec2, ord=arg)
在信息论中,两个等长字符串之间的汉明距离(Hamming distance)是两个字符串对应位置的不一样字符的个数
$$dist(A,B)=\sum_{i=0}^n{A[i]\bigoplus B[i]}$$机器学习
import numpy as np vec1 = np.array([1, 1, 0, 1, 0, 1, 0, 0, 1]) vec2 = np.array([0, 1, 1, 0, 0, 0, 1, 1, 1]) d = len(np.nonzero(vec1-vec2)[0]) # 或者 d = np.shape(np.nonzero(vec1-vec2)[0])[0]
余弦类似度,又称为余弦类似性,是经过计算两个向量的夹角余弦值来评估他们的类似度
$$\cos(\theta)=\cfrac{A\cdot B}{|A||B|}$$
or
$$\cos(\theta)=\cfrac{\sum_{i=1}^nA_iB_i}{\sqrt{\sum_{i=1}^nA_i^2}\sqrt{\sum_{i=1}^nB_i^2}}$$ide
import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) d = np.dot(vec1,vec2)/(np.linalg.norm(vec1)*(np.linalg.norm(vec2)))
用于度量两个变量之间的相关程度
$$P(A,B)=\cfrac{\sum_{i=1}^n(A_i-\overline A)(B_i-\overline B)}{\sqrt{\sum_{i=1}^n(A_i-\overline A)^2\sum_{i=1}^n(B_i-\overline B)^2}}$$学习
import numpy as np vec1 = np.array([1, 3, 4]) vec2 = np.array([4, 2, 4]) p = np.corrcoef(vec1, vec2)
用于比较有限样本集之间的类似性与差别性
$$J(A,B)=\cfrac{|A\bigcap B|}{|A\bigcup B|}$$编码
$$J_\delta(A,B)=1-J(A,B)=\cfrac{|A\bigcup B|-|A\bigcap B|}{|A\bigcup B|}$$idea
import numpy as np import scipy.spatial.distance as dist vec1 = np.array([1, 1, 0, 1, 0, 1, 0, 0, 1]) vec2 = np.array([0, 1, 1, 0, 0, 0, 1, 1, 1]) d = dist.pdist(np.array([vec1, vec2]), "jaccard")
参考连接spa