发现数据中隐藏的分组结构——从 K-means 到密度聚类与降维可视化
聚类(Clustering)是一种无监督学习方法,目标是将数据样本划分为若干组(簇),使得同组样本相似度高,不同组样本差异大。与分类不同,聚类事先不知道类别标签,完全由数据自身结构驱动。
K-means 是最经典、最常用的划分式聚类算法。其核心思想是:给定簇数 K,迭代优化每个样本到所属簇中心的距离之和。
其中 J 为 inertia(簇内平方和),\mu_i 为第 i 个簇的中心。K-means 的目标是最小化 J。
实际应用中 K 往往未知。肘部法则(Elbow Method)通过绘制不同 K 对应的 inertia,寻找曲线的"肘部"——即 inertia 下降速率明显变缓的点,作为合理的 K 值。
层次聚类不需要预先指定 K,它通过自底向上(凝聚式)或自顶向下(分裂式)的方式构建树状结构(Dendrogram)。凝聚式从每个样本作为一个簇开始,逐步合并最相近的簇,直到所有样本归于一个簇。
层次聚类的关键在于如何定义簇间距离。常用链接方式包括:单链接(最近邻)、全链接(最远邻)、平均链接、Ward 法(最小化合并后的簇内方差)。Ward 法在实践中效果较为稳健。
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)基于密度而非距离,能够发现任意形状的簇,并自动识别噪声点。它不需要预设簇数,但需要两个参数:
DBSCAN 将样本分为三类:核心点(邻域内样本数 \ge min_samples)、边界点(在核心点邻域内但自身不是核心点)、噪声点(非核心点也非边界点)。
轮廓系数(Silhouette Coefficient)衡量聚类效果,取值范围为 [-1, 1]。对于单个样本 i:
其中 a(i) 为样本 i 到同簇其他样本的平均距离(凝聚度),b(i) 为样本 i 到最近异簇样本的平均距离(分离度)。s(i) 接近 1 表示聚类合理,接近 -1 表示样本可能被分错簇。
GMM 假设数据由 K 个高斯分布混合生成,通过期望最大化(EM)算法迭代估计每个分布的均值、协方差和混合权重。与 K-means 的硬分配不同,GMM 给出样本属于每个簇的概率(软分配),对椭圆形状簇更友好。
高维数据的聚类结果难以直观理解。PCA(主成分分析)通过线性变换将数据投影到低维空间,保留最大方差;t-SNE 通过概率分布匹配保留局部邻域结构,更适合聚类结果的可视化展示。
假设二维空间有 6 个样本,设 K=2,初始中心为 (1,1) 和 (4,4):
| 迭代 | 簇中心 1 | 簇中心 2 | Inertia |
|---|---|---|---|
| 0 | (1.0, 1.0) | (4.0, 4.0) | — |
| 1 | (1.3, 1.3) | (4.2, 4.0) | 2.84 |
| 2 | (1.3, 1.3) | (4.5, 4.0) | 2.56 |
| 3 | (1.3, 1.3) | (4.5, 4.0) | 2.56(收敛) |
每次迭代中,先按欧氏距离分配样本,再按簇内均值更新中心。当两次迭代的中心位移小于阈值时停止。
以样本 i 为例:
给定一维数据点 {2, 4, 10, 12, 20, 22},设 K=2,初始中心为 {3, 18}。请执行一次 K-means 迭代(分配 + 更新),给出新的簇中心。
分配步骤:计算各点到中心 3 和 18 的距离。
更新步骤:簇1 = {2,4,10},均值 = (2+4+10)/3 = 5.33;簇2 = {12,20,22},均值 = (12+20+22)/3 = 18。
某数据集在不同 K 下的 inertia 如下表,请用肘部法则选择最合适的 K。
| K | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| Inertia | 800 | 320 | 150 | 110 | 95 | 82 |
计算相邻 K 的 inertia 下降量:K=1→2 下降 480,2→3 下降 170,3→4 下降 40,4→5 下降 15,5→6 下降 13。
从 K=2 到 K=3 仍有较大下降,但从 K=3 到 K=4 下降明显变缓(仅 40),曲线在 K=3 处形成"肘部"。
设 eps=2,min_samples=3。某样本点 p 的 eps 邻域内包含 2 个样本(含自身共 3 个)。另一样本 q 距离 p 为 1.5,但 q 的 eps 邻域内只有自身 1 个样本。请问 p 和 q 分别属于什么类型?
对于 p:eps 邻域内有 3 个样本,满足 min_samples=3,因此 p 是核心点。
对于 q:虽然 q 在 p 的 eps 邻域内,但 q 自身的 eps 邻域内只有 1 个样本(< 3),不满足核心点条件。由于 q 位于核心点 p 的邻域内,q 是边界点。
某样本 i 到同簇 3 个其他样本的距离分别为 2, 3, 5;到最近异簇 4 个样本的距离分别为 6, 7, 8, 9。计算 s(i)。
a(i) = (2 + 3 + 5) / 3 = 10 / 3 ≈ 3.33
b(i) = (6 + 7 + 8 + 9) / 4 = 30 / 4 = 7.5
s(i) = (7.5 - 3.33) / max(3.33, 7.5) = 4.17 / 7.5 ≈ 0.556