作者:Jonte Dancker
來源:DeepHub IMBA
距離度量是有監(jiān)督和無監(jiān)督學(xué)習(xí)算法的基礎(chǔ),包括k近鄰、支持向量機(jī)和k均值聚類等。
距離度量的選擇影響我們的機(jī)器學(xué)習(xí)結(jié)果,因此考慮哪種度量最適合這個(gè)問題是很重要的。因此,我們?cè)跊Q定使用哪種測量方法時(shí)應(yīng)該謹(jǐn)慎。但在做出決定之前,我們需要了解距離測量是如何工作的,以及我們可以從哪些測量中進(jìn)行選擇。
本文將簡要介紹常用的距離度量方法、它們的工作原理、如何用Python計(jì)算它們以及何時(shí)使用它們。這樣可以加深知識(shí)和理解,提高機(jī)器學(xué)習(xí)算法和結(jié)果。
在更深入地研究不同的距離測量之前,我們先要有一個(gè)關(guān)于它們?nèi)绾喂ぷ饕约叭绾芜x擇合適的測量的大致概念。距離度量用于計(jì)算給定問題空間中兩個(gè)對(duì)象之間的差異,即數(shù)據(jù)集中的特征。然后可以使用該距離來確定特征之間的相似性, 距離越小特征越相似。
對(duì)于距離的度量,我們可以在幾何距離測量和統(tǒng)計(jì)距離測量之間進(jìn)行選擇,應(yīng)該選擇哪種距離度量取決于數(shù)據(jù)的類型。特征可能有不同的數(shù)據(jù)類型(例如,真實(shí)值、布爾值、分類值),數(shù)據(jù)可能是多維的或由地理空間數(shù)據(jù)組成。
幾何距離測量1、歐氏距離 Euclidean distance歐氏距離度量兩個(gè)實(shí)值向量之間的最短距離。由于其直觀,使用簡單和對(duì)許多用例有良好結(jié)果,所以它是最常用的距離度量和許多應(yīng)用程序的默認(rèn)距離度量。
歐氏距離也可稱為l2范數(shù),其計(jì)算方法為:
Python代碼如下from scipy.spatial import distance distance.euclidean(vector_1, vector_2)歐氏距離有兩個(gè)主要缺點(diǎn)。首先,距離測量不適用于比2D或3D空間更高維度的數(shù)據(jù)。第二,如果我們不將特征規(guī)范化和/或標(biāo)準(zhǔn)化,距離可能會(huì)因?yàn)閱挝坏牟煌鴥A斜。2、曼哈頓距離 Manhattan distance曼哈頓距離也被稱為出租車或城市街區(qū)距離,因?yàn)閮蓚€(gè)實(shí)值向量之間的距離是根據(jù)一個(gè)人只能以直角移動(dòng)計(jì)算的。這種距離度量通常用于離散和二元屬性,這樣可以獲得真實(shí)的路徑。
曼哈頓距離以l1范數(shù)為基礎(chǔ),計(jì)算公式為:
Python代碼如下from scipy.spatial import distance distance.cityblock(vector_1, vector_2)曼哈頓的距離有兩個(gè)主要的缺點(diǎn)。它不如高維空間中的歐氏距離直觀,它也沒有顯示可能的最短路徑。雖然這可能沒有問題,但我們應(yīng)該意識(shí)到這并不是最短的距離。3、切比雪夫距離 Chebyshev distance切比雪夫距離也稱為棋盤距離,因?yàn)樗莾蓚€(gè)實(shí)值向量之間任意維度上的最大距離。它通常用于倉庫物流中,其中最長的路徑?jīng)Q定了從一個(gè)點(diǎn)到另一個(gè)點(diǎn)所需的時(shí)間。
切比雪夫距離由l -無窮范數(shù)計(jì)算:
Python代碼如下from scipy.spatial import distance distance.chebyshev(vector_1, vector_2)
切比雪夫距離只有非常特定的用例,因此很少使用。
4、閔可夫斯基距離 Minkowski distance閔可夫斯基距離是上述距離度量的廣義形式。它可以用于相同的用例,同時(shí)提供高靈活性。我們可以選擇 p 值來找到最合適的距離度量。
閔可夫斯基距離的計(jì)算方法為:
Python代碼如下from scipy.spatial import distance distance.minkowski(vector_1, vector_2, p)
由于閔可夫斯基距離表示不同的距離度量,它就有與它們相同的主要缺點(diǎn),例如在高維空間的問題和對(duì)特征單位的依賴。此外,p值的靈活性也可能是一個(gè)缺點(diǎn),因?yàn)樗赡芙档陀?jì)算效率,因?yàn)檎业秸_的p值需要進(jìn)行多次計(jì)算。
5、余弦相似度和距離 Cosine similarity余弦相似度是方向的度量,他的大小由兩個(gè)向量之間的余弦決定,并且忽略了向量的大小。余弦相似度通常用于與數(shù)據(jù)大小無關(guān)緊要的高維,例如,推薦系統(tǒng)或文本分析。
余弦相似度可以介于-1(相反方向)和1(相同方向)之間,計(jì)算方法為:
余弦相似度常用于范圍在0到1之間的正空間中。余弦距離就是用1減去余弦相似度,位于0(相似值)和1(不同值)之間。Python代碼如下from scipy.spatial import distance distance.cosine(vector_1, vector_2)
余弦距離的主要缺點(diǎn)是它不考慮大小而只考慮向量的方向。因此,沒有充分考慮到值的差異。
6、半正矢距離 Haversine distance半正矢距離測量的是球面上兩點(diǎn)之間的最短距離。因此常用于導(dǎo)航,其中經(jīng)度和緯度和曲率對(duì)計(jì)算都有影響。
半正矢距離的公式如下:
其中r為球面半徑,φ和λ為經(jīng)度和緯度。Python代碼如下from sklearn.metrics.pairwise import haversine_distances haversine_distances([vector_1, vector_2])
半正矢距離的主要缺點(diǎn)是假設(shè)是一個(gè)球體,而這種情況很少出現(xiàn)。
7、漢明距離漢明距離衡量兩個(gè)二進(jìn)制向量或字符串之間的差異。
對(duì)向量按元素進(jìn)行比較,并對(duì)差異的數(shù)量進(jìn)行平均。如果兩個(gè)向量相同,得到的距離是0之間,如果兩個(gè)向量完全不同,得到的距離是1。Python代碼如下from scipy.spatial import distance distance.hamming(vector_1, vector_2)
漢明距離有兩個(gè)主要缺點(diǎn)。距離測量只能比較相同長度的向量,它不能給出差異的大小。所以當(dāng)差異的大小很重要時(shí),不建議使用漢明距離。
統(tǒng)計(jì)距離測量統(tǒng)計(jì)距離測量可用于假設(shè)檢驗(yàn)、擬合優(yōu)度檢驗(yàn)、分類任務(wù)或異常值檢測。8、杰卡德指數(shù)和距離 Jaccard IndexJaccard指數(shù)用于確定兩個(gè)樣本集之間的相似性。它反映了與整個(gè)數(shù)據(jù)集相比存在多少一對(duì)一匹配。Jaccard指數(shù)通常用于二進(jìn)制數(shù)據(jù)比如圖像識(shí)別的深度學(xué)習(xí)模型的預(yù)測與標(biāo)記數(shù)據(jù)進(jìn)行比較,或者根據(jù)單詞的重疊來比較文檔中的文本模式。
Jaccard距離的計(jì)算方法為:
Python代碼如下from scipy.spatial import distance distance.jaccard(vector_1, vector_2)
Jaccard指數(shù)和距離的主要缺點(diǎn)是,它受到數(shù)據(jù)規(guī)模的強(qiáng)烈影響,即每個(gè)項(xiàng)目的權(quán)重與數(shù)據(jù)集的規(guī)模成反比。
9、Sorensen-Dice指數(shù)S?rensen-Dice指數(shù)類似于Jaccard指數(shù),它可以衡量的是樣本集的相似性和多樣性。該指數(shù)更直觀,因?yàn)樗?jì)算重疊的百分比。S?rensen-Dice索引常用于圖像分割和文本相似度分析。
計(jì)算公式如下:
Python代碼如下from scipy.spatial import distance distance.dice(vector_1, vector_2)
它的主要缺點(diǎn)也是受數(shù)據(jù)集大小的影響很大。
10、動(dòng)態(tài)時(shí)間規(guī)整 Dynamic Time Warping動(dòng)態(tài)時(shí)間規(guī)整是測量兩個(gè)不同長度時(shí)間序列之間距離的一種重要方法。可以用于所有時(shí)間序列數(shù)據(jù)的用例,如語音識(shí)別或異常檢測。
為什么我們需要一個(gè)為時(shí)間序列進(jìn)行距離測量的度量呢?如果時(shí)間序列長度不同或失真,則上述面說到的其他距離測量無法確定良好的相似性。比如歐幾里得距離計(jì)算每個(gè)時(shí)間步長的兩個(gè)時(shí)間序列之間的距離。但是如果兩個(gè)時(shí)間序列的形狀相同但在時(shí)間上發(fā)生了偏移,那么盡管時(shí)間序列非常相似,但歐幾里得距離會(huì)表現(xiàn)出很大的差異。動(dòng)態(tài)時(shí)間規(guī)整通過使用多對(duì)一或一對(duì)多映射來最小化兩個(gè)時(shí)間序列之間的總距離來避免這個(gè)問題。當(dāng)搜索最佳對(duì)齊時(shí),這會(huì)產(chǎn)生更直觀的相似性度量。通過動(dòng)態(tài)規(guī)劃找到一條彎曲的路徑最小化距離,該路徑必須滿足以下條件:邊界條件:彎曲路徑在兩個(gè)時(shí)間序列的起始點(diǎn)和結(jié)束點(diǎn)開始和結(jié)束單調(diào)性條件:保持點(diǎn)的時(shí)間順序,避免時(shí)間倒流連續(xù)條件:路徑轉(zhuǎn)換限制在相鄰的時(shí)間點(diǎn)上,避免時(shí)間跳躍整經(jīng)窗口條件(可選):允許的點(diǎn)落入給定寬度的整經(jīng)窗口坡度條件(可選):限制彎曲路徑坡度,避免極端運(yùn)動(dòng)我們可以使用 Python 中的 fastdtw 包:from scipy.spatial.distance import euclidean from fastdtw import fastdtw ?distance, path = fastdtw(timeseries_1, timeseries_2, dist=euclidean)
動(dòng)態(tài)時(shí)間規(guī)整的一個(gè)主要缺點(diǎn)是與其他距離測量方法相比,它的計(jì)算工作量相對(duì)較高。
總結(jié)在這篇文章中,簡要介紹了十種常用的距離測量方法。本文中已經(jīng)展示了它們是如何工作的,如何在Python中實(shí)現(xiàn)它們,以及經(jīng)常使用它們解決什么問題。如果你認(rèn)為我錯(cuò)過了一個(gè)重要的距離測量,請(qǐng)留言告訴我。
-
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8553瀏覽量
136948
發(fā)布評(píng)論請(qǐng)先 登錄
機(jī)器學(xué)習(xí)特征工程:分類變量的數(shù)值化處理方法
法蘭距離:相機(jī)鏡頭系統(tǒng)的關(guān)鍵參數(shù)
學(xué)習(xí)電子電路中常見的問題
自動(dòng)駕駛中常提的模仿學(xué)習(xí)是什么?
學(xué)習(xí)單片機(jī)快速方法
機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中需避免的 7 個(gè)常見錯(cuò)誤與局限性
工業(yè)鏡頭測量中的“工作距離”是什么?
自動(dòng)駕駛中常提的“強(qiáng)化學(xué)習(xí)”是個(gè)啥?
10公里超遠(yuǎn)距離傳輸,安信可LoRa模組的遠(yuǎn)、低、省!
FPGA在機(jī)器學(xué)習(xí)中的具體應(yīng)用
如何檢測自動(dòng)化設(shè)備中的直線導(dǎo)軌品質(zhì)是否優(yōu)良?
光模塊波長與傳輸距離
18個(gè)常用的強(qiáng)化學(xué)習(xí)算法整理:從基礎(chǔ)方法到高級(jí)模型的理論技術(shù)與代碼實(shí)現(xiàn)
電子電路設(shè)計(jì)中常用的接地方式詳解
瑞芯微RK平臺(tái)開發(fā)必備的20個(gè)常用命令,幫您效率翻倍
10個(gè)機(jī)器學(xué)習(xí)中常用的距離度量方法
評(píng)論