作者:老齊
與本文相關的圖書推薦:《跟老齊學Python:數據分析》
向量之間的距離,是機器學習的重要概念,但並非只有一種定義方式,這裡暫且列出幾種,在後續內容中還會提到其他形式的「距離」。
歐幾裡得距離歐幾裡得距離(Euclidean Distance),是數學上最常見的定義:
設
或者寫成:
這也是一般的線性代數教材中給出的向量間距離的定義。然而,在機器學習中,還有對距離的其他定義方式。
曼哈頓距離曼哈頓距離(Manhattan Distance),也稱計程車距離或城市街區距離。曼哈頓是美國紐約市(New York City)的一個行政區,它的道路形狀是這樣的(圖為曼哈頓部分街區圖):
在如此布局的街道上,從一點到另外一點,不論怎麼走,距離都是一樣的,觀察下圖中的標記。如果從點
閔可夫斯基根據上圖所示的特點,命名了曼哈頓距離:
設
例如在
以俄羅斯數學家切比雪夫命名的切比雪夫距離(Chebyshev Distance ),定義如下:
設
即:
例如在
切比雪夫距離的另外一種等價表達方式是:
閔可夫斯基距離從數學角度來看,將籤署三個距離定義一般化,就是閔可夫斯基距離(Minkowski Distance):
設
若
若
若
要想計算上述各種「距離」,可以根據定義編寫函數。在科學計算中,我們常常使用SciPy提供的函數。例如,計算兩個行向量的曼哈頓距離:
import numpy as np
from scipy.spatial.distance import cityblock
a = np.array([2,3,4])
b = np.array([9,8,7])
md = cityblock(a, b)
md輸出:
15scipy.spatial.distance包含了計算多種類型的距離的函數,詳細內容可參考官方文檔:https://docs.scipy.org/doc/scipy/reference/spatial.distance.html。
在機器學習中,如果要度量「相似度」,可以使用某種類型的距離。例如,在k近鄰分類算法中,通過計算測試實例與訓練實例之間的距離,以確定該測試實例屬於哪一個類別。從Scikit-learn庫提供的k近鄰分類算法模型可以看出對距離類型的設置。
KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None, **kwargs)其中參數metric='minkowski',默認值為字符串'minkowski',即使用閔可夫斯基距離,並且另外一個參數默認值p=2,意味著具體應用的是歐幾裡得距離;如果設置p=1則在此模型中應用曼哈頓距離度量實例間的距離。
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target用KNeighborsClassifier對著名的鳶尾花數據集分類,並分別使用曼哈頓距離和歐幾裡得距離。
from sklearn.neighbors import KNeighborsClassifier
knn_l1 = KNeighborsClassifier(p=1) # 基於曼哈頓距離
knn_l2 = KNeighborsClassifier(p=2) # 基於歐幾裡得距離
knn_l1.fit(X, y)
knn_l2.fit(X, y)然後分別用這兩個模型判斷[2.7, 5.2, 6.3, 0.2]應該屬於哪個類別。
flower_l1 = knn_l1.predict([[2.7, 5.2, 6.3, 0.2]])
flower_l2 = knn_l2.predict([[2.7, 5.2, 6.3, 0.2]])
flower_l1_name = iris.target_names[flower_l1]
flower_l2_name = iris.target_names[flower_l2]
print("the instance [2.7, 5.2, 6.3, 0.2] is:")
print(flower_l1_name.item(), " by Manhattan Distance;")
print(flower_l2_name.item(), " by Euclidean Distance.")輸出:
the instance [2.7, 5.2, 6.3, 0.2] is:
virginica by Manhattan Distance;
versicolor by Euclidean Distance.在上述示例中,應用不同距離判斷測試實例所屬的類別,結果不同。當然,並非都如此。
★搜索技術問答的公眾號:老齊教室
」★在公眾號中回覆:老齊,可查看所有文章、書籍、課程。
」覺得好看,就點這裡👇👇👇