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 中使用不同距离?

  1. sklearn 中的 KMeans:默认仅支持欧氏距离,若需其他距离,可通过自定义距离矩阵实现(但计算效率较低)。

  2. 自定义实现:类似你提供的代码,通过修改距离计算逻辑支持不同度量(如示例中的曼哈顿距离)。

  3. 替代算法 :

    • DBSCAN:支持任意距离度量,基于密度聚类。
    • 谱聚类:通过相似度矩阵定义距离,适用于非线性结构。

选择建议

  • 连续数值数据:优先考虑欧氏距离或曼哈顿距离。
  • 高维稀疏数据:余弦相似度更合适。
  • 有相关性的数据:马氏距离能消除维度间的相关性影响。

不同距离度量会引导 KMeans 发现不同形状的簇(如欧氏距离倾向于发现球形簇),需根据数据特性和业务需求选择。

posted @ 2025-06-27 08:56  华小电  阅读(136)  评论(0)    收藏  举报