K-均值聚类 (K-Means Clustering)
K-均值是应用最广泛的聚类算法之一。它的目标是将数据划分为 K 个簇(Cluster),使得同一个簇内的数据点尽可能相似,而不同簇之间的数据点尽可能不同。
核心思想与质心 (Centroid)
核心思想:K-Means 通过一个迭代的过程来找到最佳的簇划分。这个过程可以概括为两步:
- 分配 (Assign): 将每个数据点分配给离它最近的质心 (Centroid)。质心可以看作是每个簇的“中心点”。
- 更新 (Update): 将每个质心移动到分配给它的所有数据点的平均位置。
算法会不断重复这两个步骤,直到质心的位置不再变化,此时聚类完成。
动手试试:
选择您想要的簇数量 (K),然后点击“运行 K-Means”,观察质心如何移动并最终完成数据聚类。
from sklearn.cluster import KMeans
# X: 未标记的数据
X = ...
# 创建 K-Means 模型
# n_clusters 就是 K 值
kmeans = KMeans(n_clusters=3, random_state=42)
# 训练模型并进行预测
clusters = kmeans.fit_predict(X)
评估聚类效果:轮廓系数
由于没有“正确答案”,我们需要一种方法来评估聚类效果的好坏。轮廓系数 (Silhouette Coefficient) 是一个常用的指标,它衡量了每个数据点与其所在簇的紧密程度,以及与其他簇的分离程度。
- 分数接近 +1: 表示样本远离相邻的簇,聚类效果好。
- 分数接近 0: 表示样本在两个簇的边界上。
- 分数接近 -1: 表示样本可能被分配到了错误的簇。
from sklearn.metrics import silhouette_score
# 计算所有样本的平均轮廓系数
score = silhouette_score(X, clusters)
print(f"轮廓系数: {score:.4f}")
轮廓系数得分
N/A
(运行 K-Means 后显示)