1503其他聚类方法
📌 一、 课程导入(5 分钟)
回顾与反思:
- k-means 简单高效,但有两个明显的局限:
- 需要指定 K 值(有些时候我们根本不知道数据有几群)。
- 只能发现球形簇(如果数据形状复杂,比如月牙形、环形,k-means 会失效)。
展示问题: 在大屏幕上同时展示三张散点图:
- 圆形簇(k-means 擅长)。
- 月牙形簇(k-means 不擅长)。
- 环形簇(k-means 彻底失效)。
引出新课: 今天介绍两种新的聚类方法,分别解决上述两个问题:
- 层次聚类 → 不需要提前指定 K 值(自动生成聚类树)。
- DBSCAN → 可以处理任意形状的簇(基于密度,而非距离)。
- 👨🏫 教师活动:展示三种数据形状的散点图;提问“如果只用 k-means,哪张图的效果会最差?”;引出“需要新的工具”的结论。
- 🧑🎓 学生活动:观察三张散点图,思考 k-means 在月牙形和环形数据上会如何失败(画出可能的质心和聚类边界)。
通过视觉对比制造“k-means 能力边界”的认知,为引入新方法建立必要性。让学生意识到:没有万能模型,选择合适的方法比优化参数更重要。
📖 二、 解决问题过程(一):层次聚类(Hierarchical Clustering)
1. 核心思想——自底向上合并(凝聚层次聚类)
flowchart TD
A["每个样本单独作为一个簇"] --> B["计算所有簇两两之间的距离"]
B --> C["合并距离最近的两个簇"]
C --> D{"是否达到停止条件<br>(K值或距离阈值)"}
D -->|否| B
D -->|是| E["输出聚类结果(树状图)"]
关键概念——树状图(Dendrogram)
- 横轴:每个样本
- 纵轴:合并时的距离(或相似度)
- 从下往上看:距离越近的样本越先合并
- 选择一条水平线切断树 → 得到不同 K 值的聚类结果
2. 代码实现
3. 层次聚类的优势
- 不需要预设 K 值(通过树状图决定切断位置)。
- 可解释性强(树状图直观展示聚类层次关系)。
- 适用于小数据集(计算复杂度 O(n³),不适合大数据)。
- 👨🏫 教师活动:运行层次聚类代码,展示树状图;用红色虚线演示“在不同高度切断 → 得到不同 K 值”。
- 🧑🎓 学生活动:观察树状图,尝试在不同的切断高度读取对应的 K 值;讨论“如果数据量很大,这种方法会遇到什么问题”。
树状图的视觉呈现比 k-means 的 inertia 曲线更直观地展示了“聚类的层次结构”。学生通过“用鼠标拖动切断线”的交互,能直观理解“不同距离阈值 → 不同聚类粒度”。
📖 三、 解决问题过程(二):DBSCAN(基于密度的聚类)
1. 核心思想——密度相连
k-means 用“距离”定义相似性,DBSCAN 用“密度”定义簇——密集区域形成一个簇。
2. 三个关键概念
| 概念 | 定义 | 图示 |
|---|---|---|
| 核心点(Core Point) | 在半径 eps 内至少包含 min_samples 个点 | 红色点 |
| 边界点(Border Point) | 在核心点的 eps 范围内,但自身密度不够 | 绿色点(附着在红色簇的边缘) |
| 噪声点(Noise Point) | 既不是核心点,也不在任何核心点的 eps 范围内 | 蓝色点(孤立点) |
flowchart LR
subgraph 核心点
A["eps 范围内 ≥ min_samples 个点"]
end
subgraph 边界点
B["在核心点附近,但自身密度不够"]
end
subgraph 噪声点
C["孤立、不属于任何簇"]
end
D["密度可达:由核心点→边界点→……传播"] --> E["形成完整簇"]
3. 两个核心参数
| 参数 | 含义 | 调参直觉 |
|---|---|---|
| eps | 邻域半径 | 太小 → 很多点被标为噪声;太大 → 所有点聚成一团 |
| min_samples | 成为核心点所需的最少邻居数 | 太大 → 核心点减少,簇变少;太小 → 噪声点减少,簇增多 |
4. 代码实现
5. DBSCAN 的优势
- 不需要指定 K 值(自动发现簇数量)。
- 能发现任意形状的簇(月牙形、环形等)。
- 能自动识别噪声点(标记为 -1)。
- 👨🏫 教师活动:在月牙形数据上运行 DBSCAN,对比 k-means 的失败结果;调整 eps 和 min_samples,展示参数变化的影响。
- 🧑🎓 学生活动:在本地运行 DBSCAN 代码;尝试不同的 eps 值(0.1, 0.2, 0.3, 0.5),观察聚类结果和噪声点数量的变化。
通过“月牙形”这一 k-means 的典型失败案例,展示 DBSCAN 的独特优势,加深“不同算法解决不同问题”的工程选型意识。
✍️ 四、 解决问题过程(三):三种聚类方法的对比与选型
1. 完整对比表格
| 维度 | K-Means | 层次聚类 | DBSCAN |
|---|---|---|---|
| 是否需要预设 K | ✅ 需要 | ❌ 不需要(通过树状图决定) | ❌ 不需要(自动发现) |
| 簇形状 | 仅限球形 | 任意形状(受距离度量影响) | 任意形状(基于密度) |
| 噪声处理 | ❌ 无(每个点必归一类) | ❌ 无 | ✅ 自动标记噪声为 -1 |
| 计算复杂度 | O(n·K·d·t) | O(n²·log n) | O(n·log n) |
| 适用数据量 | 大(快速) | 小(树状图绘制慢) | 中等(对 eps 敏感) |
| 主要缺点 | 需指定 K,仅球形簇 | 计算慢,不适合大数据 | 对参数 eps 敏感 |
2. 选型决策树(快速指南)
flowchart TD
A["📊 待聚类数据"] --> B{"是否知道 K 值?"}
B -->|知道| C{"簇形状是否规则(球形)?"}
B -->|不知道| D{"是否需要自动识别噪声?"}
C -->|是| E["✅ K-Means"]
C -->|否| F["✅ DBSCAN"]
D -->|是| G["✅ DBSCAN"]
D -->|否| H{"数据量是否适中(< 5000)?"}
H -->|是| I["✅ 层次聚类"]
H -->|否| J["⚠️ 尝试 DBSCAN 或降维后层次聚类"]</pre>
3. 典型案例推荐
| 应用场景 | 推荐方法 | 理由 |
|---|---|---|
| 客户分群(已知分3类) | K-Means | 速度快,结果稳定 |
| 探索性数据分析(未知K) | 层次聚类 | 树状图辅助判断K值 |
| 地理空间位置聚类 | DBSCAN | 可发现任意形状的热点区域 |
| 图像压缩(颜色量化) | K-Means | 效率高,效果好 |
| 异常检测(数据中有离群点) | DBSCAN | 自动识别噪声 |
| 生物分类(物种亲缘关系) | 层次聚类 | 树状图展示进化关系 |
- 👨🏫 教师活动:逐个讲解对比表格中的维度;用“选型决策树”引导学生快速定位合适算法;展示每个典型案例的简短代码或结果图。
- 🧑🎓 学生活动:选择一个自己感兴趣的应用场景,用决策树推导出推荐算法;分组讨论“如果业务方要求既要知道K值又要识别噪声,应该怎么办?”(答案:先用DBSCAN识别噪声,再对剩余数据用K-Means)。
选型决策树将三类算法的特征转化为一个可操作的决策流程,帮助学生在面对新数据时快速做出合理选择。典型案例帮助学生建立“场景-算法”的映射记忆。
📝 五、 课堂小结(5 分钟)
flowchart LR
root["📊 聚类方法全景(第三次课)"]
subgraph C1["📌 K-Means"]
direction TB
A1["✅ 快速、简单"]
A2["⚠️ 需指定K、仅球形簇"]
end
subgraph C2["📌 层次聚类"]
direction TB
B1["✅ 不需K、树状图直观"]
B2["⚠️ 计算慢、不适合大数据"]
end
subgraph C3["📌 DBSCAN"]
direction TB
C1_node["✅ 任意形状、自动识别噪声"]
C2_node["⚠️ 对eps参数敏感"]
end
subgraph C4["🎯 选型原则"]
direction TB
D1["K已知 + 球形 → K-Means"]
D2["探索性分析 → 层次聚类"]
D3["复杂形状 + 噪声 → DBSCAN"]
end
root --> C1
root --> C2
root --> C3
root --> C4
style root fill:#1565c0,stroke:#0d47a1,color:#fff,stroke-width:2px,rx:8px,ry:8px
style C1 fill:#e3f2fd,stroke:#1e88e5,stroke-width:1px
style C2 fill:#fff3e0,stroke:#ff9800,stroke-width:1px
style C3 fill:#e8f5e9,stroke:#43a047,stroke-width:1px
style C4 fill:#f3e5f5,stroke:#9c27b0,stroke-width:1px
✏️ 随堂检测与互动练习
📮 六、 课后作业与拓展
📋 七、 板书设计
本课用到的单词
| 英文术语 | 发音(美式) | 中文释义 | 专业语境解释 |
|---|---|---|---|
| Hierarchical Clustering | /ˌhaɪəˈrɑːr.kɪ.kəl ˈklʌs.tər.ɪŋ/ | 层次聚类 | 通过自底向上合并或自顶向下分裂构建聚类层次树的方法。 |
| Dendrogram | /ˈden.droʊ.ɡræm/ | 树状图 | 展示层次聚类合并过程的树形图,横轴为样本,纵轴为合并距离。 |
| DBSCAN | /diː.biː.es.siːˈeɪn/ | 基于密度的聚类 | Density-Based Spatial Clustering of Applications with Noise,一种基于密度连通性的聚类方法。 |
| Epsilon (eps) | /ˈep.sɪ.lɒn/ | 邻域半径 | DBSCAN 中定义“邻域”的半径参数,核心概念。 |
| Core Point | /kɔːr pɔɪnt/ | 核心点 | DBSCAN 中邻域内至少有 min_samples 个点的样本。 |
| Noise Point | /nɔɪz pɔɪnt/ | 噪声点 | DBSCAN 中不属于任何簇的孤立点,标记为 -1。 |
| Density Reachable | /ˈden.sə.ti rɪˈtʃə.bəl/ | 密度可达 | DBSCAN 中通过一系列核心点连接起来的点的关系。 |