KMeans 算法
KMeans 算法的核心是計算樣本與質心之間的距離,不同的距離度量方法會導致聚類結果的差異。
1. 歐氏距離(Euclidean Distance)
- 公式:\(d(x,y) = \sqrt{\sum_{i=1}^{n}(x_i-y_i)^2}\)
- 特點:最常用的距離度量,直觀表示空間中兩點的直線距離。
- 適用場景:數據分布均勻、各向同性的場景,如坐標點聚類。
- 實現:
sklearn默認使用歐氏距離。
2. 曼哈頓距離(Manhattan Distance)
- 公式:\(d(x, y) = \sum_{i=1}^{n} |x_i - y_i|\) ,各維度差值的絕對值之和。
- 二維空間示例在二維平面中,點\((x_1, y_1)\)和\((x_2, y_2)\)的曼哈頓距離為:\(d = |x_1 - x_2| + |y_1 - y_2|\)
3. 余弦相似度(Cosine Similarity)
- 公式:\(\text{sim}(x,y) = \frac{x \cdot y}{||x|| \cdot ||y||}\)
- 特點:衡量方向相似性,而非絕對距離。常用于高維數據(如文本、圖像)。
- 適用場景:文檔聚類、推薦系統。
- 注意:需將相似度轉換為距離(如
1 - 余弦相似度)。
4. 切比雪夫距離(Chebyshev Distance)
- 公式:\(d(x,y) = \max_i |x_i - y_i|\)
- 特點:只考慮維度間的最大差異,對異常值不敏感。
- 適用場景:網格狀數據或需要忽略次要差異的場景。
5. 閔可夫斯基距離(Minkowski Distance)
-
公式:\(d(x,y) = \left( \sum_{i=1}^{n} |x_i - y_i|^p \right)^{1/p}\)
-
參數: \(p \geq 1\)
- \(p=1\) 時退化為曼哈頓距離;
- \(p=2\) 時即為歐氏距離;
- \(p \to \infty\) 時趨近于切比雪夫距離。
-
適用場景:通用距離度量,通過調整 \(p\) 適應不同數據特性。
6. 馬氏距離(Mahalanobis Distance)
- 公式:\(d(x,y) = \sqrt{(x-y)^T S^{-1} (x-y)}\)
- 特點:考慮數據的協方差結構,對各向異性數據效果好。
- 適用場景:處理具有相關性的高維數據(如基因數據)。
7. 漢明距離(Hamming Distance)
- 公式:兩個向量中不同元素的比例。
- 適用場景:分類變量或二進制數據(如文本編碼、基因序列)。
8. 編輯距離(Levenshtein Distance)
- 定義:將一個字符串轉換為另一個字符串所需的最少編輯操作次數(插入、刪除、替換)。
- 適用場景:自然語言處理中的文本聚類。
如何在 KMeans 中使用不同距離?
-
sklearn 中的 KMeans:默認僅支持歐氏距離,若需其他距離,可通過自定義距離矩陣實現(但計算效率較低)。
-
自定義實現:類似你提供的代碼,通過修改距離計算邏輯支持不同度量(如示例中的曼哈頓距離)。
-
替代算法 :
- DBSCAN:支持任意距離度量,基于密度聚類。
- 譜聚類:通過相似度矩陣定義距離,適用于非線性結構。
選擇建議
- 連續數值數據:優先考慮歐氏距離或曼哈頓距離。
- 高維稀疏數據:余弦相似度更合適。
- 有相關性的數據:馬氏距離能消除維度間的相關性影響。
不同距離度量會引導 KMeans 發現不同形狀的簇(如歐氏距離傾向于發現球形簇),需根據數據特性和業務需求選擇。

浙公網安備 33010602011771號