Skip to content

聚类 ​

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

概念详解 ​

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

数学公式及其推导 ​

K-Means 的目标函数为:

J=∑i=1N∑k=1Krik||xi−μk||2

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

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

rik=1,k=arg⁡minj||xi−μj||2

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

∂J∂μk=2∑i=1Nrik(μk−xi)=0

得到:

μk=∑i=1Nrikxi∑i=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。