歐氏距離(也稱歐幾里得度量)指在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