张芷铭的个人博客

K-Means 是经典无监督聚类算法,通过迭代优化最小化簇内平方和,使同簇样本相似度高、异簇相似度低。

算法流程

  1. 初始化:选择 k 个初始聚类中心(可用 K-Means++)
  2. 分配:每个样本分配到最近的聚类中心
  3. 更新:重新计算每个簇的均值作为新中心
  4. 迭代:重复直到收敛

目标函数

$$\min_{C} \sum_{i=1}^{n} \min_{j} |x_i - \mu_j|^2$$

为什么用均值:均值最小化簇内平方和。

优缺点

优点缺点
简单高效需预设 k 值
时间复杂度 $O(nkt)$对初始化敏感
适合大规模数据仅适用于球状簇

适用场景

  • 数据量大且维度不高
  • 簇呈球形分布
  • 对速度要求高

K 值选择

方法说明
肘部法则WCSS 曲线拐点
轮廓系数选择最高值
Gap Statistic比较参照分布

代码示例

1
2
3
4
5
from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3, init='k-means++', random_state=42)
y_kmeans = kmeans.fit_predict(X)
centers = kmeans.cluster_centers_

改进版本

版本改进
K-Means++智能初始化,提高稳定性
Mini-Batch K-Means大规模数据加速
Kernel K-Means处理非线性可分数据

Comments