聚类基础:K-Means 与层级聚类

聚类是无监督学习的核心任务:在没有真实标签时,把相似样本归到同一组。K-Means 以速度快著称,层级聚类则以树状结构保留细分关系。理解二者差异,才能为数据选对方法。

K-Means 怎么做

K-Means 先随机选 K 个质心,反复执行「把样本分到最近质心」与「用簇内均值更新质心」两步,直到质心稳定。目标是最小化簇内平方误差和(SSE)。

from sklearn.cluster import KMeans

km = KMeans(n_clusters=3, random_state=0, n_init=10)
labels = km.fit_predict(X)
print(km.inertia_)        # 簇内平方误差和

层级聚类怎么算

层级聚类从每个样本各自成簇开始,反复合并最相近的两个簇,直到只剩一个根;或自顶向下分裂。结果是一棵 dendrogram,可在任意高度「横切」得到不同粒度的簇,无需预先指定 K。

from sklearn.cluster import AgglomerativeClustering

ac = AgglomerativeClustering(n_clusters=3, linkage="ward")
labels = ac.fit_predict(X)

怎么选簇数

K-Means 常用「肘部法」看 inertia 随 K 变化的拐点,或借助轮廓系数。层级聚类则靠观察树状图的高度。数据量大时 K-Means 更省内存,层级聚类多用于中小规模或需要层次关系的场景。

小结

K-Means 快但需给定 K、对球形簇友好;层级聚类无需预设 K、给出层次结构却开销大。先想清要稳定分组还是要可解释的树,再选方法。

参考与延伸阅读

本文累计阅读