1. 程式人生 > >機器學習中幾大距離定義及程序實現

機器學習中幾大距離定義及程序實現

def numpy 返回 字符串 坐標 算法 info 定義 idea

一、歐氏距離(Euclidean Distance)

1、定義:兩點間的直線距離

2、公式:

(1)、二維平面a(x1,y1),b(x2,y2)的歐式距離

技術分享圖片

   (2)、三維平面a(x1,y1,z1),b(x2,y2,z2)的歐式距離

  技術分享圖片

  3、代碼實現:

以下python代碼都依賴包numpy、math  

#Euclidean 歐式距離算法,傳入參數為兩個點向量,返回值為歐式距離

def Euclidean(vec1,vec2):
npvec1,npvec2 = np.array(vec1),np.array(vec2)
return math.sqrt(((npvec1 - npvec2) ** 2).sum())

二、曼哈頓距離(Manhattan Distance)

1、定義:從曼哈頓的一個十字路口到另一個十字路口,行走距離顯然不是兩點間的直線距離,這個實際的行走距離即為“曼哈頓距離”,曼哈頓距離又稱為“城市街區距離”

技術分享圖片

  2、公式:
(1)、二維平面a(x1,y1),b(x2,y2)的曼哈頓距離
    

技術分享圖片



3、代碼實現
def Manhattan(vec1,vec2):
npvec1, npvec2 = np.array(vec1), np.array(vec2)
return np.abs(npvec1 - npvec2).sum()

三、切比雪夫距離(Chebyshev Distance)
  1、定義:國際象棋中,國王可以直行,橫行,斜行,所以國王走一步可以移動到相鄰8個格子中任一個,國王從格子(x1,y1)到格子(x2,y2)最少需要多少步,這個距離就叫切比雪夫距離。

技術分享圖片

  2、公式:
二維平面兩點a(x1,y1)與b(x2,y2)間的切比雪夫距離

技術分享圖片

3、代碼:

def Chebyshev(vec1,vec2):
npvec1, npvec2 = np.array(vec1), np.array(vec2)
return max(np.abs(npvec1 - npvec2))
四、閔可夫斯基距離(Minkowski Distance)
1、定義:閔氏距離不是一種距離,而是一組距離的定義,是對多個距離度量公式的概括性的表述
2、公式:兩個n維變量a(x11,x12,…,x1n)與b(x21,x22,…,x2n)間的閔可夫斯基距離定義為

技術分享圖片

當p=1時,就是曼哈頓距離

當p=2時,就是歐式距離

當p=∞時,就是切比雪夫距離

3、代碼:

def Minkowski(vec1,vec2,mode):
npvec1, npvec2 = np.array(vec1), np.array(vec2)
if mode == 1:
return np.abs(npvec1 - npvec2).sum()
elif mode == 2:
return math.sqrt(((npvec1 - npvec2) ** 2).sum())
else:
return max(np.abs(npvec1 - npvec2))

五、馬氏距離

1、定義:馬氏距離是基於樣本分布的一種距離。物理意義就是在規範化的主成分空間中的歐氏距離。所謂規範化主成分空間就是利用主成分分析對一些數據進行主成分分解,再對所有主成分分解作歸一化,形成新的坐標軸,由這些坐標軸張成的空間就是主成分空間。

技術分享圖片

2、公式:

有M個樣本向量X1~Xm,協方差矩陣記為S,均值記為向量μ,則其中樣本向量X到μ的馬氏距離表示為:

技術分享圖片

向量Xi與Xj之間的馬氏距離定義為:

技術分享圖片

3、代碼:

def Mahalanobis(vec1,vec2):
npvec1, npvec2 = np.array(vec1), np.array(vec2)
npvec = np.array([npvec1,npvec2])
sub = npvec.T[0] - npvec.T[1]
inv_sub = np.linalg.inv(np.cov(npvec1,npvec2))
return math.sqrt(np.dot(inv_sub,sub).dot(sub.T))


六、漢明距離

  1、定義:兩個等長字符串s1與s2的漢明距離為:將其中一個變為另外一個所需要作的最小字符替換次數

    漢明重量:符串中非零的元素個數

2、代碼

def Hamming(str1,str2):
i = 0
cnt = 0
while i < len(str1):
if str1[i] != str2[i]:
cnt = cnt + 1
i = i + 1
return cnt

機器學習中幾大距離定義及程序實現