面試題:各種距離計算兩個樣本向量的相似性
my_list1 = [5, 0, 3, 0, 2, 0, 0, 2, 0, 0]
my_list2 = [3, 0, 2, 0, 1, 1, 0, 1, 0, 1]
分別利用曼哈頓距離、歐氏距離、切比雪夫距離、閔可夫斯基距離、餘弦距離計算二者之間的相似性。
〇、範數
一、歐氏距離(Euclidean Distance)
1.定義:
歐氏距離(euclidean metric)(也稱歐幾里得度量,二範數)是通常採用的距離定義,指在m維空間中兩個點之間的真實距離。在二維和三維空間中的歐氏距離就是兩點之間的實際距離。
2.計算公式:
(1) 二維空間公式:
(2) 三維空間的公式:
(3) n維空間的公式:
3.numpy代碼實現:
import numpy as np
vector1 = np.array([5, 0, 3, 0, 2, 0, 0, 2, 0, 0])
vector2 = np.array([3, 0, 2, 0, 1, 1, 0, 1, 0, 1])
print('euclidean_dist =', np.linalg.norm(vector1 - vector2)) # ord = 2
結果:
euclidean_dist = 3.0
4.適用的數據分析模型
歐氏距離能夠體現個體數值特徵的絕對差異,用於需要從維度的數值大小中體現差異的分析,如:
使用用戶行爲指標,分析用戶價值的相似度或差異。
二、曼哈頓距離(Manhattan Distance)
1.定義:
顧名思義,在曼哈頓街區,要從一個十字路口開車到另一個十字路口,駕駛距離顯然不是兩點間的直線距離。這個實際駕駛距離就是“曼哈頓距離(一範數)”,也稱爲“城市街區距離”(City Block distance)。
2.計算公式:
(1) 二維平面兩點與間的曼哈頓距離:
(2) n維空間點與的曼哈頓距離:
3.numpy代碼實現
import numpy as np
vector1 = np.array([5, 0, 3, 0, 2, 0, 0, 2, 0, 0])
vector2 = np.array([3, 0, 2, 0, 1, 1, 0, 1, 0, 1])
print('Manhattan_dist =', np.linalg.norm(vector1 - vector2, ord = 1))
結果:
Manhattan_dist = 7.0
三、切比雪夫距離 (Chebyshev Distance)
1.定義
切比雪夫距離(L∞無窮範數),又稱棋盤距離。
國際象棋中,國王可以直行、橫行、斜行。國王從格子走到格子最少需要多少步?你會發現最少步數總是 步。
2.計算公式
(1) 二維平面兩點與間的切比雪夫距離:
(2) n維空間點與的切比雪夫距離:
(3) 公式的另一種等價形式是:可以使用放縮法和夾逼法則來證明。
3.numpy代碼實現
import numpy as np
vector1 = np.array([5, 0, 3, 0, 2, 0, 0, 2, 0, 0])
vector2 = np.array([3, 0, 2, 0, 1, 1, 0, 1, 0, 1])
print('Chebyshev_dist =', np.linalg.norm(vector1 - vector2, ord = np.inf))
結果:
Chebyshev_dist = 2.0
4.適用的數據分析模型
如果把切比雪夫不等式用於高斯分佈的數據集,會得到一個非常保守、粗糙的上下界。
四、 閔可夫斯基距離(Minkowski Distance)
1.定義和公式
閔可夫斯基距離(Minkowski Distance),是衡量數值點間距離的常見方法,假設數值點 ,那麼閔可夫斯基距離定義爲:
該距離最常用的p是2和1,前者是歐幾里得距離,後者是曼哈頓距離。
假設在曼哈頓街區乘坐出租車從P點到Q點,白色方格表示高樓大廈,灰色表示街道:
綠色的斜線表示歐幾里得距離,在現實中是不可能的。其他三條折線表示了曼哈頓距離,這三條折線的長度是相等的。
當 p 趨近於無窮大時,閔可夫斯基距離轉化成切比雪夫距離(Chebyshev distance):
2. numpy代碼實現
import numpy as np
vector1 = np.array([5, 0, 3, 0, 2, 0, 0, 2, 0, 0])
vector2 = np.array([3, 0, 2, 0, 1, 1, 0, 1, 0, 1])
vect_size = np.size(vector1)
print('Minkowski_dist =',round(np.power(np.sum(np.power(np.abs(vector1 - vector2), vect_size)), 1 / vect_size), 3))
結果:
Minkowski_dist = 2.001 # 當p = 10時,閔可夫斯基距離已經接近切比雪夫距離。
五、餘弦距離(Cosine Distance)
1.定義
幾何中,夾角餘弦可用來衡量兩個向量方向的差異;機器學習中,借用這一概念來衡量樣本向量之間的差異。
2.計算公式
二維空間中向量與向量的夾角餘弦公式:
兩個n維樣本點和的夾角餘弦爲:
即:
夾角餘弦取值範圍爲[-1,1]。
餘弦越大,表示兩個向量的夾角越小;餘弦越小,表示兩向量的夾角越大。
當兩個向量的方向重合時,餘弦取最大值1;當兩個向量的方向完全相反,餘弦取最小值-1。
3.numpy代碼實現
import numpy as np
vector1 = np.array([5, 0, 3, 0, 2, 0, 0, 2, 0, 0])
vector2 = np.array([3, 0, 2, 0, 1, 1, 0, 1, 0, 1])
cosθ = np.dot(vector1, vector2) / (np.linalg.norm(vector1) * np.linalg.norm(vector2))
print('cosθ =', round(cosθ, 2))
print('夾角爲:', round(np.rad2deg(np.arccos(cosθ)), 1),'°')
結果:
cosθ = 0.94
夾角爲: 20.7 °
總結
- 閔可夫斯基距離 ,當p = 1時,爲曼哈頓距離;當p = 2時,爲歐幾里得距離;當 時,爲切比雪夫距離。式中,p越大,距離越小,切比雪夫距離最小。
歡迎關注,敬請點贊!
返回頂部