K-means聚类

1 K-means算法概况

K均值算法(即,k-means clustering),是一种无监督聚类算法

K-means算法属于NP-hard问题,不过存在高效的启发式算法,能快速收敛到一个局部最优解

2 K-means算法细节

算法步骤

  1. 对于N个样本,随机选择其中K个,作为最初的质心
  2. 遍历所有样本,选择最新的质心进行归类,形成K个簇
  3. 根据每个簇的样本重新计算质心(比如求均值)
  4. 重复步骤2-3,直到每个簇质心基本不再变化或达到最大迭代次数

算法的收敛过程如下所示:

(图源来自https://giphy.com/)

K值的选择:

  • 先验知识:根据业务理解对 K 值或簇内最少样本数存在预期或约束,或者其他外部指标来评价
  • 交叉验证:类似于有监督学习的评价,利用与分组误差/稳定性强关联的指标来评价聚类结果
  • 肘部法则(Elbow):随着 K 增大,簇内平方和会单调下降;下降幅度明显变缓处的“肘部拐点”即候选 K
  • 轮廓系数(Silhouette):综合簇内聚集程度和簇间分散程度来评价聚类效果的指标,值越大越好

3 K-means算法改进

问题1:质心初始化过于随机,最终结果不稳定

  • 改进思路1:与前一个质心差异越大的样本越可能被选为下一个质心(K-means++)
  • 改进思路2:借助其他聚类的结果初始化质心,比如层次聚类

问题2:样本量太大时候会导致过多的距离计算,性能存在优化空间

  • 改进思路1:减少不必要的距离计算,比如elkan K-means(借助两边之和大于等于第三边,以及两边之差小于第三边的三角形性质,简化计算)
  • 改进思路2:保持数据分布的前提下进行数据抽样,比如Mini Batch K-means

其他问题:局部最优、对异常值敏感、K值不好把握、会受到数据偏斜的影响

主要优点:原理简单、收敛较快、效果还行、调参不多、具有可解释性

参考:

K-Means聚类算法原理

往年同期文章