张芷铭的个人博客

聚类是无监督学习的核心技术,将数据按相似性分组,使同组内对象相似度高、组间相似度低。

聚类 vs 分类:聚类是无监督学习,无预先定义的标签,基于数据本身相似性发现内在结构;分类是监督学习,依赖带标签的训练数据进行类别预测。

发展历程

阶段时间代表算法
传统算法1960s-1980sK-means、层次聚类
密度聚类兴起1990sDBSCAN
高维大数据时代2000s至今谱聚类、深度聚类

数学基础

相似性度量

距离类型公式适用场景
欧几里得距离$d(i,j) = \sqrt{\sum_{k=1}^{n}(x_{ik} - x_{jk})^2}$低维数据,向量大小重要
曼哈顿距离$d(i,j) = \sum_{k=1}^{n}x_{ik} - x_{jk}
切比雪夫距离$d(i,j) = \max_kx_{ik} - x_{jk}

主要算法

K-means

算法流程

  1. 随机选择 K 个初始簇中心
  2. 将每个对象分配到最近的簇
  3. 重新计算簇均值作为新中心
  4. 重复直到收敛

目标函数(最小化误差平方和): $$E = \sum_{i=1}^{k}\sum_{p \in C_i} |p - m_i|^2$$

优缺点

优点缺点
简单高效需预设 K 值
计算复杂度线性增长对初始中心敏感
仅适用于球状簇
1
2
3
4
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
labels = kmeans.predict(X)

层次聚类

构建树状结构展示数据层次关系。

方法流程
凝聚(自底向上)每对象初始为一类,逐步合并相似类
分裂(自顶向下)所有点初始为一类,逐步分裂
1
2
3
from scipy.cluster.hierarchy import linkage, dendrogram
Z = linkage(X, method='ward')
dendrogram(Z)

DBSCAN

基于密度的聚类,能发现任意形状簇并识别噪声点。

核心概念

  • ε-邻域:半径 ε 内的区域
  • 核心点:邻域内至少有 MinPts 个点
  • 边界点:在核心点邻域内但非核心点
  • 噪声点:既非核心点也非边界点
1
2
3
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.3, min_samples=5)
clusters = dbscan.fit_predict(X)

高斯混合模型(GMM)

假设数据由多个高斯分布混合而成,通过 EM 算法估计参数。

概率密度函数: $$p(x) = \sum_{k=1}^{K} \pi_k \mathcal{N}(x|\mu_k, \Sigma_k)$$

聚类评估

内部指标

指标公式说明
轮廓系数$s(i) = \frac{b(i) - a(i)}{\max{a(i), b(i)}}$结合内聚与分离,[-1,1],越大越好
CH指数$\frac{SS_B/(k-1)}{SS_W/(n-k)}$簇间/簇内距离比,越大越好

外部方法

肘部法则:绘制不同 K 值对应的 SSE 曲线,选择拐点作为最佳 K 值。

应用场景

场景应用
客户价值分析客户分群、精准营销
图像分割区域分割、目标识别
生物信息学基因表达分析
异常检测欺诈检测、入侵检测

算法选择建议

算法适用场景
K-means数据均匀、簇近似球形、数据量大
层次聚类小规模数据、需可视化层次关系
DBSCAN簇形状不规则、含噪声、K 未知
GMM数据符合混合高斯分布、需概率输出

发展趋势

  1. 高维聚类:传统算法在高维空间性能下降,需开发适应算法
  2. 自动参数选择:减少对用户经验的依赖
  3. 流数据聚类:增量式实时聚类
  4. 深度聚类:结合深度神经网络特征学习
  5. 可解释性聚类:增强结果的可解释性

Comments