聚類是如何度量數據間的“遠近”的?
在聚類分析中,距離度量是核心概念之一,它決定了數據點之間的相似性或差異性,從而影響聚類結果的質量。
選擇合適的距離度量方法,就像為數據選擇合適的“觀察視角”,能夠幫助我們發現隱藏的模式結構。
本文將詳細介紹幾種常用的聚類距離度量方法,包括它們的原理、代碼實現,以及這些方法滿足的基本性質。
1. 常用距離度量
1.1. 閔可夫斯基距離(Minkowski Distance)
閔可夫斯基距離是一種通用的距離度量方法,它涵蓋了多種常見的距離計算方式。
其公式為:\(D(x,y)=\left(\sum_{i=1}^{n}|x_i-y_i|^p\right)^{\frac{1}{p}}\)
- 當$ p=1 $時,它是曼哈頓距離(
Manhattan Distance),適用于網格狀空間,例如城市街區。 - 當$ p=2 $時,它是歐幾里得距離(
Euclidean Distance),是最常用的距離度量方式,適用于連續變量。 - 當$ p\to\infty $時,它趨近于切比雪夫距離(
Chebyshev Distance),即各維度差的最大值。
基于scikit-learn庫計算這些距離非常簡單:
from sklearn.metrics.pairwise import pairwise_distances
import numpy as np
# 示例數據
x = np.array([[1, 2, 3]])
y = np.array([[4, 5, 6]])
# 計算不同 p 值的閔可夫斯基距離
manhattan_distance = pairwise_distances(x, y, metric='manhattan')[0][0]
euclidean_distance = pairwise_distances(x, y, metric='euclidean')[0][0]
chebyshev_distance = pairwise_distances(x, y, metric='chebyshev')[0][0]
print("曼哈頓距離:", manhattan_distance)
print("歐幾里得距離:", euclidean_distance)
print("切比雪夫距離:", chebyshev_distance)
## 輸出結果:
'''
曼哈頓距離: 9.0
歐幾里得距離: 5.196152422706632
切比雪夫距離: 3.0
'''
1.2. 漢明距離(Hamming Distance)
漢明距離用于衡量兩個等長字符串之間的差異,即對應位置上不同字符的個數。
它常用于離散屬性的比較。
代碼示例如下:
from sklearn.metrics import hamming_loss
# 示例數據
x = np.array([0, 1, 1, 0])
y = np.array([1, 1, 0, 0])
# 計算漢明距離
hamming_distance = hamming_loss(x, y)
print("漢明距離:", hamming_distance)
## 輸出結果:
'''
漢明距離: 0.5
'''
1.3. 杰卡德距離(Jaccard Distance)
杰卡德距離用于衡量兩個集合之間的相似性,定義為兩個集合交集的大小與并集大小的比值的補數。
它適用于稀疏數據。
代碼示例如下:
from sklearn.metrics import jaccard_score
# 示例數據
x = np.array([0, 1, 1, 0])
y = np.array([1, 1, 0, 0])
# 計算杰卡德距離
jaccard_similarity = jaccard_score(x, y)
jaccard_distance = 1 - jaccard_similarity
print("杰卡德距離:", jaccard_distance)
## 輸出結果:
'''
杰卡德距離: 0.6666666666666667
'''
1.4. 余弦距離
余弦距離通過向量夾角衡量方向相似性,常用于文本分析。
它的公式是:$ cos(\theta)=\frac{X\cdot Y}{||X||\cdot ||Y||} $
實際使用常轉換為余弦距離:距離 = 1 - 余弦相似度。
代碼示例如下:
from sklearn.metrics.pairwise import cosine_distances
import numpy as np
# 示例數據
x = np.array([[1, 2, 3]])
y = np.array([[4, 5, 6]])
# 計算余弦距離
cosine_dist = cosine_distances(x, y)[0][0]
print("余弦距離:", cosine_dist)
## 輸出結果:
'''
余弦距離: 0.025368153802923787
'''
2. 距離度量的基本性質
距離度量方法通常需要滿足以下基本性質,以確保其合理性和有效性:
- 非負性(
Non-negativity):距離必須是非負的,即$ D(x,y)\geq 0 $。
這意味著任意兩個點之間的距離不能為負值。
- 同一性(
Identity):當且僅當兩個點相同時,距離為零,即\(D(x,y)=0\) 當且僅當\(x=y\) 。
這確保了距離能夠區分不同的點。
- 對稱性(
Symmetry):距離是無方向的,即\(D(x,y)=D(y,x)\) 。
這意味著從點\(x\) 到點\(y\) 的距離與從點\(y\) 到點\(x\) 的距離相同。
- 三角不等式(
Triangle Inequality):對于任意三個點\(x\) 、\(y\) 和\(z\) ,滿足\(D(x,z)\leq D(x,y)+D(y,z)\) 。
這確保了距離的合理性,即直接從\(x\) 到\(z\) 的距離不會超過經過\(y\) 的距離。
這些性質的意義在于,它們為距離度量提供了數學上的合理性,使得距離能夠正確地反映數據點之間的相似性或差異性。
3. 連續屬性與離散屬性的距離
對于連續屬性,常用的距離度量方法是歐幾里得距離和曼哈頓距離。
這些方法基于數值的差值來計算距離,適用于數值型數據。
- 歐幾里得距離:適用于多維空間中的連續數據,計算兩點之間的直線距離。
- 曼哈頓距離:適用于網格狀空間,計算兩點之間的“步數”距離。
對于離散屬性,常用的距離度量方法是漢明距離和杰卡德距離。
- 漢明距離:適用于二進制數據或分類數據,計算兩個序列中不同位置的數量。
- 杰卡德距離:適用于集合數據,計算兩個集合之間的相似性。
4. 總結
距離度量是聚類分析中的關鍵環節。通過選擇合適的距離度量方法,可以更好地反映數據點之間的相似性或差異性。
本文介紹了幾種常用的距離度量方法,包括閔可夫斯基距離、漢明距離和杰卡德距離等等,并通過代碼示例展示了它們的使用方式。
同時,我們還探討了距離度量的基本性質及其意義,以及如何針對連續屬性和離散屬性進行距離計算。
在實際應用中,選擇哪種距離度量方法取決于數據的類型和聚類的目標。

浙公網安備 33010602011771號