Skip to content

聚类

聚类是一类无监督学习方法,目标是在没有标签的情况下,把相似样本分到同一组。常见方法包括 K-Means、层次聚类、DBSCAN 和高斯混合模型。

概念详解

以 K-Means 为例,给定样本集合 {xi}i=1N,希望找到 K 个簇中心 {μk}k=1K,使样本到所属簇中心的距离尽可能小。

数学公式及其推导

K-Means 的目标函数为:

J=i=1Nk=1Krik||xiμk||2

其中 rik{0,1},表示样本 xi 是否属于第 k 个簇。

固定中心 μk 时,最优分配为:

rik=1,k=argminj||xiμj||2

固定分配 rik 时,对 μk 求导:

Jμk=2i=1Nrik(μkxi)=0

得到:

μk=i=1Nrikxii=1Nrik

应用代码

python
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

X, _ = make_blobs(n_samples=300, centers=3, cluster_std=0.7, random_state=0)

kmeans = KMeans(n_clusters=3, n_init=10, random_state=0)
labels = kmeans.fit_predict(X)

print("簇中心:")
print(kmeans.cluster_centers_)
print("轮廓系数:", silhouette_score(X, labels))

小结

K-Means 简单高效,但需要预先指定簇数,并且倾向于发现球形簇。对于任意形状簇或含噪声数据,可以考虑 DBSCAN。