当前位置: 首页 > news >正文

分裂层次聚类算法:从原理到实战的全方位解析

一、什么是分裂层次聚类?

    分裂层次聚类(Divisive Hierarchical Clustering) 是一种自顶向下的聚类方法。它从所有数据点组成的一个大簇开始,逐步将簇分裂为更小的子簇,直到每个子簇仅含单个数据点或满足预设的终止条件(如最小簇大小)。这种方法的优势在于能直观展示数据的层次结构,常用于生物学分类、社交网络分析等领域。


二、算法原理与步骤

分裂层次聚类的核心思想是递归分裂,其步骤如下:

  1. 初始化:将所有数据视为一个簇,作为树状图的根节点。
  2. 选择待分裂簇:计算当前所有簇的离散度(如簇内误差平方和SSE),选择离散度最大的簇进行分裂。
  3. 分裂方法:常用 K-means(K=2) 将簇一分为二,或通过其他方法(如PCA、最大直径点)确定分裂边界。
  4. 更新簇结构:用子簇替换父簇,更新树状图。
  5. 终止条件:当所有簇的大小达到预设的最小值,或达到目标簇数量时停止。

分裂过程示意图

根簇(所有数据)  
   ├── 子簇A(分裂后)  
   └── 子簇B(分裂后)  
         ├── 子簇B1  
         └── 子簇B2  

三、算法优缺点

优点

  • 直观性:通过树状图(Dendrogram)展示层次结构,便于理解数据关系。
  • 无需预设簇数:适合探索性分析,可动态调整簇的划分。

缺点

  • 计算复杂度高:分裂过程需反复计算簇内距离,时间复杂度为 O(n^2)O(n2),难以处理大规模数据。
  • 分裂策略敏感:分裂方法(如K-means的初始质心选择)可能影响最终结果。

四、Python实现代码

    以下代码基于 K-means分裂策略,使用 scikit-learn 实现分裂层次聚类,并可视化每一步的分裂结果:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs

def compute_sse(X):
    """计算簇内误差平方和(SSE)[[3]]"""
    if len(X) == 0:
        return 0
    centroid = np.mean(X, axis=0)
    return np.sum((X - centroid) ** 2)

def split_cluster(X, min_size=5):
    """递归分裂簇,直到满足最小簇大小[[3]]"""
    clusters = [X]
    while True:
        max_sse_idx = np.argmax([compute_sse(c) for c in clusters])
        cluster = clusters.pop(max_sse_idx)
        if len(cluster) <= min_size:
            clusters.append(cluster)
            break
        # 使用K-means分裂为两个子簇
        kmeans = KMeans(n_clusters=2, random_state=42).fit(cluster)
        labels = kmeans.labels_
        sub_clusters = [cluster[labels == 0], cluster[labels == 1]]
        clusters.extend(sub_clusters)
    return clusters

# 生成示例数据
X, _ = make_blobs(n_samples=100, centers=3, random_state=42)

# 执行分裂聚类
final_clusters = split_cluster(X, min_size=10)

# 可视化结果
plt.figure(figsize=(10, 6))
colors = ['red', 'blue', 'green', 'purple', 'orange']
for i, cluster in enumerate(final_clusters):
    plt.scatter(cluster[:, 0], cluster[:, 1], c=colors[i], label=f'Cluster {i+1}')
plt.title("分裂层次聚类结果(最小簇大小=10)")
plt.legend()
plt.show()


五、实际案例:基因表达数据聚类

背景:假设有4个物种的基因表达数据,需通过分裂层次聚类分析其进化关系。

步骤

  1. 将数据初始化为一个簇。
  2. 第一次分裂:根据K-means将簇分为 动物类 和 植物类
  3. 第二次分裂:动物类进一步分为 哺乳动物 和 鸟类,植物类分为 开花植物 和 蕨类
  4. 终止条件:每个子簇仅含一个物种。

树状图结果

根簇(所有物种)  
   ├── 动物类  
   │    ├── 哺乳动物  
   │    └── 鸟类  
   └── 植物类  
        ├── 开花植物  
        └── 蕨类  

六、总结

    分裂层次聚类通过自顶向下的分裂策略揭示数据内在结构,适合小规模数据或需要层次分析的场景。然而,其计算复杂度和分裂策略的敏感性需在实际应用中权衡。结合代码实现和案例,读者可快速掌握该算法的核心思想与应用方法。

参考资料

  • 腾讯云开发者社区. (2025). 深入解析分裂型层次聚类的原理与算法
  • Venus AI. (2024). 层次聚类方法的解读与评价
  • 老饼讲解-机器学习. (2022). 层次聚类算法入门指南

相关文章:

  • Java-模块一
  • Controller/RestController的区别
  • 支持多个和可选参数
  • 【WPF】c#读取CAD的dxf文件,并基于Canvas将读取到的数据重新描绘到界面
  • Unity URP 实现场景和UI添加后处理
  • Java 反射详细教程
  • 数据可视化(matplotlib)-------辅助图标的设置
  • 早餐 3.20
  • 笔记:代码随想录算法训练营day57:99.岛屿数量 深搜、岛屿数量 广搜、100.岛屿的最大面积
  • ssh连接解析时间过长如何解决
  • 模块、包和库
  • 【day16】搭建测试环境数据库
  • uni-app基础问题(一)
  • SysOM 可观测体系建设(一):万字长文解读低开销、高精度性能剖析工具livetrace
  • Linux线程操作(创建,终止,等待,分离)
  • 基于STM32电子钟闹钟数码管显示设计(Proteus仿真+程序+设计报告+原理图PCB+讲解视频)
  • 二分查找的应用
  • numpy学习笔记3:三维数组 np.ones((2, 3, 4)) 的详细解释
  • 汽车相关液体介绍
  • MinIO Docker
  • 海外市场,押注中国无人驾驶龙头
  • 人民日报和音:相信中国就是相信明天
  • 习近平向第三十四届阿拉伯国家联盟首脑理事会会议致贺信
  • 雅安市纪委监委回应黄杨钿甜耳环事件:相关政府部门正在处理
  • 查幽门螺杆菌的这款同位素长期被海外垄断,秦山核电站实现突破
  • 关税互降后的外贸企业:之前暂停的订单加紧发货,后续订单考验沟通谈判能力