聚类是无监督学习的核心技术,将数据按相似性分组,使同组内对象相似度高、组间相似度低。
聚类 vs 分类:聚类是无监督学习,无预先定义的标签,基于数据本身相似性发现内在结构;分类是监督学习,依赖带标签的训练数据进行类别预测。
发展历程
| 阶段 | 时间 | 代表算法 |
|---|---|---|
| 传统算法 | 1960s-1980s | K-means、层次聚类 |
| 密度聚类兴起 | 1990s | DBSCAN |
| 高维大数据时代 | 2000s至今 | 谱聚类、深度聚类 |
数学基础
相似性度量
| 距离类型 | 公式 | 适用场景 |
|---|---|---|
| 欧几里得距离 | 低维数据,向量大小重要 | |
| 曼哈顿距离 | $d(i,j) = \sum_{k=1}^{n} | x_{ik} - x_{jk} |
| 切比雪夫距离 | $d(i,j) = \max_k | x_{ik} - x_{jk} |
主要算法
K-means
算法流程:
- 随机选择 K 个初始簇中心
- 将每个对象分配到最近的簇
- 重新计算簇均值作为新中心
- 重复直到收敛
目标函数(最小化误差平方和):
优缺点:
| 优点 | 缺点 |
|---|---|
| 简单高效 | 需预设 K 值 |
| 计算复杂度线性增长 | 对初始中心敏感 |
| 仅适用于球状簇 |
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
labels = kmeans.predict(X)层次聚类
构建树状结构展示数据层次关系。
| 方法 | 流程 |
|---|---|
| 凝聚(自底向上) | 每对象初始为一类,逐步合并相似类 |
| 分裂(自顶向下) | 所有点初始为一类,逐步分裂 |
from scipy.cluster.hierarchy import linkage, dendrogram
Z = linkage(X, method='ward')
dendrogram(Z)DBSCAN
基于密度的聚类,能发现任意形状簇并识别噪声点。
核心概念:
- ε-邻域:半径 ε 内的区域
- 核心点:邻域内至少有 MinPts 个点
- 边界点:在核心点邻域内但非核心点
- 噪声点:既非核心点也非边界点
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.3, min_samples=5)
clusters = dbscan.fit_predict(X)高斯混合模型(GMM)
假设数据由多个高斯分布混合而成,通过 EM 算法估计参数。
概率密度函数:
聚类评估
内部指标
| 指标 | 公式 | 说明 |
|---|---|---|
| 轮廓系数 | 结合内聚与分离,[-1,1],越大越好 | |
| CH指数 | 簇间/簇内距离比,越大越好 |
外部方法
肘部法则:绘制不同 K 值对应的 SSE 曲线,选择拐点作为最佳 K 值。
应用场景
| 场景 | 应用 |
|---|---|
| 客户价值分析 | 客户分群、精准营销 |
| 图像分割 | 区域分割、目标识别 |
| 生物信息学 | 基因表达分析 |
| 异常检测 | 欺诈检测、入侵检测 |
算法选择建议
| 算法 | 适用场景 |
|---|---|
| K-means | 数据均匀、簇近似球形、数据量大 |
| 层次聚类 | 小规模数据、需可视化层次关系 |
| DBSCAN | 簇形状不规则、含噪声、K 未知 |
| GMM | 数据符合混合高斯分布、需概率输出 |
发展趋势
- 高维聚类:传统算法在高维空间性能下降,需开发适应算法
- 自动参数选择:减少对用户经验的依赖
- 流数据聚类:增量式实时聚类
- 深度聚类:结合深度神经网络特征学习
- 可解释性聚类:增强结果的可解释性