距離及其在機器學習中應用

2021-03-02 老齊教室

作者:老齊

與本文相關的圖書推薦:《跟老齊學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

輸出:

15

scipy.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.

在上述示例中,應用不同距離判斷測試實例所屬的類別,結果不同。當然,並非都如此。

搜索技術問答的公眾號:老齊教室

」★

在公眾號中回覆:老齊,可查看所有文章、書籍、課程。

覺得好看,就點這裡👇👇👇

相關焦點

  • Score Function Trick及其在機器學習中的應用
    引機器學習中有很多有意思的 Trick,Deepmind 的 Shakir Mohamed (http://blog.shakirm.com) 維護了一個高質量的博客,其中寫了一系列的機器學習 Trick,包括 Score Function 和 Reparameterisation。
  • 機器學習中的分類距離
    生活中,距離通常是用於形容兩個地方或兩個物體之間的遠近。在人工智慧機器學習領域,常使用距離來衡量兩個樣本之間的相似度。「物以類聚」我們知道「物以類聚」通常用於比喻同類的東西經常聚在一起。機器學習中,距離就是遵循物以類聚的思想。
  • 機器學習在生命科學中的應用
    歐洲分子生物學實驗室於4月11日在Nature Reviews Drug Discovery發表了一篇關於機器學習在drug-develop開發中應用的綜述文章,該文章概述了當前機器學習中使用的工具和技術,並概述了迄今為止機器學習在關鍵drug-develop領域中取得的進展。
  • 機器學習在生活中的九大有趣應用
    人工智慧現在已經變得無處不在了,生活中有很多關於它的應用,可能你正在以某種方式使用它,但你卻不知道它。人工智慧最流行的應用之一是機器學習,它是人工智慧的核心,是使計算機具有智能的根本途徑。本文我們為大家分享了一些我們每天使用的機器學習的例子,可能有的應用中你都不知道它們是由機器學習驅動的。
  • 機器學習中的歐式距離、餘弦距離存在的某種關係
    在機器學習中,通常會使用到兩種距離度量方法,歐式距離和餘弦相似度。在文本求相似性時通常是將文檔向量化後再運用以上公式,一般我們採用較多的是餘弦相似性來表示文本之間的距離,歐式距離和餘弦距離直接是否存在某種關係?下面為我將說明兩者的關係。
  • 算法應用|機器學習python應用,初識機器學習是怎樣滴感受?
    2、必須非常深入地學習和理解在scikit- learn中使用的機器學習的理論和算法。實際上也不需要,除非你是這一方向的碩士甚至博士學位的學習者。機器學習不同的算法涉及的知識點是非常廣闊的,要做到每一種算法的理論知識的學習都非常深入,是比較難的,實際上簡單的機器學習應用中,只需要了解不同算法的基礎知識就可以使用了。
  • 【推薦】基於MATLAB編程、機器學習、深度學習在圖像處理中的實踐技術應用
    因此,為了幫助廣大科研人員更加系統地學習圖像處理、機器學習和深度學習的基礎理論知識及對應的代碼實現方法,Ai尚研修特舉辦「MATLAB圖像處理與機器學習技術應用培訓班」 培訓班,旨在幫助學員掌握圖像處理的基礎知識,以及經典機器學習算法和最新的深度神經網絡、遷移學習、對抗生成網絡等算法的基本原理及其MATLAB編程實現方法。
  • [乾貨]漫談:機器學習中距離和相似性度量方法
  • 機器學習在馬蜂窩酒店聚合中的應用初探
    為了使酒店聚合更加實時、準確、高效,現在馬蜂窩酒店業務中近 80% 的聚合任務都是由機器自動完成。本文將詳細闡述酒店聚合是什麼,以及時下熱門的機器學習技術在酒店聚合中是如何應用的。當然,最容易想到的技術方案就是通過比對兩家酒店的名稱、地址、距離來判斷是否相同。
  • 機器學習中距離和相似性度量方法
    作者 | daniel-D來源 | http://www.cnblogs.com/daniel-D/p/3244718.html在機器學習和數據挖掘中
  • 深度 機器學習中的並行計算:GPU、CUDA和實際應用
    傳統上(不管這裡的傳統到底是什麼意思),機器學習是在一個單處理器環境中執行的,其中算法的瓶頸可能會導致模型處理過程中出現極大的延遲——從訓練到分類、再到距離和誤差計算等等。除了最近對神經網絡訓練的利用,許多機器學習(包括 scikit-learn 這樣現成的庫和開發者自己實現的算法)都沒有使用到並行處理。
  • 分子指紋及其在虛擬篩選中的應用
    轉載自《分子指紋及其在虛擬篩選中的應用》http://blog.molcalx.com.cn/2019/01/29/fingerprint.html 分子指紋(Molecular fingerprint)在比較兩個化合物之間的相似性時遇到的最重要問題之一是任務的複雜性,這取決於分子表徵的複雜性。
  • 機器學習裡的歐氏距離
    在詩句裡,距離可以很浪漫,「世界上最遙遠的距離,不是生與死的距離,不是天各一方,而是,我就站在你的面前,你卻不知道我愛你」。在機器學習裡,距離是嚴謹的,需要一個精確的公式來計算。許多機器學習的常見算法都需要用到距離函數,即用於計算兩個不同觀測(obs)之間的距離。
  • 機器學習流程,以及實踐應用
    編輯導語: 機器學習是一種數據分析技術,讓計算機執行人和動物與生俱來的活動:從經驗中學習,也被稱為預測分析;本文作者分享了關於機器學習的流程以及實踐應用,我們一起來看一下。
  • TalkingData大規模機器學習的應用
    有一些模型學習中用到的優化方法,如牛頓法,需要計算訓練特徵維度規模的海塞矩陣的逆矩陣及其乘法,其計算複雜度為 O(n^3))。隨著數據量和特徵數量的增長,模型訓練的計算量急速增加,使得訓練時間變得越來越長而不可接受。而硬體數量的擴充,帶來的計算效率提升往往是低於線性的增長。因此,在進行大數據問題時,我們始終面臨著計算資源相對不足的問題。
  • 問答系統中機器學習算法應用:Quora 2017年ML平臺規劃
    到今天,Quora 在機器學習的使用已經得到廣泛增長,不僅在構建更大更好的模型方面走得更深入,同時也擴大了機器學習使用的領域。本文將給大家介紹 Quora 在 2017 年機器學習規劃的全景圖。機器學習用例下面將通過 Quora 產品的不同部分,來介紹我們是如何應用機器學習算法。1.
  • 算法應用|機器學習python應用,簡單機器學習項目實踐
    上一篇文章中介紹了機器學習的簡單知識,還有python中進行機器學習實踐需要的生態環境,接下來將會通過鳶尾花分類這個例子對機器學習做一個簡要的介紹。通過一步一步地實現這個項目來介紹以下內容。導入和使用python中機器學習的各個方面的類庫。
  • 機器學習中的目標函數總結
    因此目標函數的構造是機器學習中的中心任務。本文介紹機器學習中若干典型的目標函數構造方法,它們是對問題進行建模的關鍵環節。針對實際應用問題,在構造目標函數時可以借鑑前人的經驗和技巧。接下來將分有監督學習(進一步細分為分類問題,回歸問題,概率模型,混合問題),無監督學習(進一步細分為數據降維問題,聚類問題),半監督學習,距離度量學習,以及強化學習進行介紹。
  • 10大機器學習算法及應用,你知道幾個?
    來源:kdnuggets作者:James Le翻譯:序媛本文導讀:本文將為大家盤點,機器學習領域都有哪些常用的算法。毫無疑問,在過去兩年中,機器學習和人工智慧的普及度都得到了大幅提升。機器學習算法可分為三個大類:有監督學習、無監督學習和強化學習。
  • 【乾貨】人工智慧:5種存在於大自然的技術及其應用
    人類不僅花費了數十年的時間來研究完善數學算法,以使這些奇妙複雜的算法發揮效用,而且在這一過程中,我們還在不斷尋求突破性發展,並以此作為靈感,深入研究,從而使得下一代智能能夠得以存在於我們的星球上。大自然,及其所包含的一切,都深深地根植於AI的運作中,並將在這裡成長壯大。 David Attenborough拍攝的野生動物紀錄片令人印象深刻。