距離測量是有監督和無監督學習演算法的基礎,包括k近鄰、支援向量機和k均值聚類等。
距離測量的選擇會影響我們的機器學習結果,因此考慮哪種測量最適合這個問題是很重要的。因此,我們在決定使用哪種測量方法時應該謹慎。但在做出決定之前,我們需要了解距離測量是如何運作的,以及我們可以從哪些測量中進行選擇。
本文將簡要介紹常用的距離測量方法、它們的工作原理、如何用Python計算它們以及何時使用它們。這樣可以加深知識和理解,提高機器學習演算法和結果。
在更深入研究不同的距離測量之前,我們先要有一個關於它們如何運作以及如何選擇合適的測量的大致概念。
距離度量用於計算給定問題空間中兩個物件之間的差異,即資料集中的特徵。然後可以使用該距離來確定特徵之間的相似性, 距離越小特徵越相似。
對於距離的測量,我們可以在幾何距離測量和統計距離測量之間進行選擇,並且應該選擇哪種距離測量取決於資料的類型。特徵可能有不同的資料類型(例如,真實值、布林值、分類值),資料可能是多維的或由地理空間資料組成。
#歐氏距離度量兩個實值向量之間的最短距離。由於其直觀,使用簡單和對許多用例有良好結果,因此它是最常用的距離度量和許多應用程式的預設距離度量。
歐氏距離也可稱為l2範數,其計算方法為:
Python程式碼如下
from scipy.spatial import distance distance.euclidean(vector_1, vector_2)
歐氏距離有兩個主要缺點。首先,距離測量不適用於比2D或3D空間更高維度的資料。第二,如果我們不將特徵標準化和/或標準化,距離可能會因為單位的不同而傾斜。
曼哈頓距離也被稱為出租車或城市街區距離,因為兩個實值向量之間的距離是根據一個人只能以直角移動計算的。這種距離測量通常用於離散和二元屬性,這樣可以獲得真實的路徑。
曼哈頓距離以l1範數為基礎,計算公式為:
Python程式碼如下
from scipy.spatial import distance distance.cityblock(vector_1, vector_2)
曼哈頓的距離有兩個主要的缺點。它不如高維空間中的歐氏距離直觀,它也沒有顯示可能的最短路徑。雖然這可能沒有問題,但我們應該意識到這並不是最短的距離。
切比雪夫距離也稱為棋盤距離,因為它是兩個實值向量之間任意維度上的最大距離。它通常用於倉庫物流中,其中最長的路徑決定了從一個點到另一個點所需的時間。
切比雪夫距離由l -無窮範數計算:
Python程式碼如下
from scipy.spatial import distance distance.chebyshev(vector_1, vector_2)
切比雪夫距離只有非常特定的用例,因此很少使用。
閔可夫斯基距離是上述距離測量的廣義形式。它可以用於相同的用例,同時提供高靈活性。我們可以選擇 p 值來找到最適合的距離測量。
閔可夫斯基距離的計算方法為:
Python程式碼如下
from scipy.spatial import distance distance.minkowski(vector_1, vector_2, p)
由於閔可夫斯基距離表示不同的距離度量,它就有與它們相同的主要缺點,例如在高維空間的問題和對特徵單位的依賴。此外,p值的靈活性也可能是一個缺點,因為它可能會降低計算效率,因為找到正確的p值需要進行多次計算。
餘弦相似度是方向的度量,他的大小由兩個向量之間的餘弦決定,並且忽略了向量的大小。餘弦相似度通常用於與資料大小無關的高維,例如,推薦系統或文字分析。
余弦相似度可以介于-1(相反方向)和1(相同方向)之间,计算方法为:
余弦相似度常用于范围在0到1之间的正空间中。余弦距离就是用1减去余弦相似度,位于0(相似值)和1(不同值)之间。
Python代码如下
from scipy.spatial import distance distance.cosine(vector_1, vector_2)
余弦距离的主要缺点是它不考虑大小而只考虑向量的方向。因此,没有充分考虑到值的差异。
半正矢距离测量的是球面上两点之间的最短距离。因此常用于导航,其中经度和纬度和曲率对计算都有影响。
半正矢距离的公式如下:
其中r为球面半径,φ和λ为经度和纬度。
Python代码如下
from sklearn.metrics.pairwise import haversine_distances haversine_distances([vector_1, vector_2])
半正矢距离的主要缺点是假设是一个球体,而这种情况很少出现。
汉明距离衡量两个二进制向量或字符串之间的差异。
对向量按元素进行比较,并对差异的数量进行平均。如果两个向量相同,得到的距离是0之间,如果两个向量完全不同,得到的距离是1。
Python代码如下
from scipy.spatial import distance distance.hamming(vector_1, vector_2)
汉明距离有两个主要缺点。距离测量只能比较相同长度的向量,它不能给出差异的大小。所以当差异的大小很重要时,不建议使用汉明距离。
统计距离测量可用于假设检验、拟合优度检验、分类任务或异常值检测。
Jaccard指数用于确定两个样本集之间的相似性。它反映了与整个数据集相比存在多少一对一匹配。Jaccard指数通常用于二进制数据比如图像识别的深度学习模型的预测与标记数据进行比较,或者根据单词的重叠来比较文档中的文本模式。
Jaccard距离的计算方法为:
Python代码如下
from scipy.spatial import distance distance.jaccard(vector_1, vector_2)
Jaccard指数和距离的主要缺点是,它受到数据规模的强烈影响,即每个项目的权重与数据集的规模成反比。
Sörensen-Dice指数类似于Jaccard指数,它可以衡量的是样本集的相似性和多样性。该指数更直观,因为它计算重叠的百分比。Sörensen-Dice索引常用于图像分割和文本相似度分析。
计算公式如下:
Python代码如下
from scipy.spatial import distance distance.dice(vector_1, vector_2)
它的主要缺点也是受数据集大小的影响很大。
动态时间规整是测量两个不同长度时间序列之间距离的一种重要方法。可以用于所有时间序列数据的用例,如语音识别或异常检测。
为什么我们需要一个为时间序列进行距离测量的度量呢?如果时间序列长度不同或失真,则上述面说到的其他距离测量无法确定良好的相似性。比如欧几里得距离计算每个时间步长的两个时间序列之间的距离。但是如果两个时间序列的形状相同但在时间上发生了偏移,那么尽管时间序列非常相似,但欧几里得距离会表现出很大的差异。
动态时间规整通过使用多对一或一对多映射来最小化两个时间序列之间的总距离来避免这个问题。当搜索最佳对齐时,这会产生更直观的相似性度量。通过动态规划找到一条弯曲的路径最小化距离,该路径必须满足以下条件:
我们可以使用 Python 中的 fastdtw 包:
from scipy.spatial.distance import euclidean from fastdtw import fastdtw distance, path = fastdtw(timeseries_1, timeseries_2, dist=euclidean)
动态时间规整的一个主要缺点是与其他距离测量方法相比,它的计算工作量相对较高。
在这篇文章中,简要介绍了十种常用的距离测量方法。本文中已经展示了它们是如何工作的,如何在Python中实现它们,以及经常使用它们解决什么问题。如果你认为我错过了一个重要的距离测量,请留言告诉我。
以上是十個機器學習中常用的距離測量方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!