基于层次聚类算法(HC)的数据可视化详解
层次聚类算法(Hierarchical Clustering, HC)通过构建树状结构揭示数据内在的层次关系,其可视化方法在生物学、市场分析、文本挖掘等领域广泛应用。以下从算法原理、可视化方法、工具实现及案例展开详细阐述。
一、层次聚类算法原理与步骤
层次聚类分为 凝聚型(Agglomerative) 和 分裂型(Divisive) 两类,前者自底向上合并簇,后者自上而下分裂簇。凝聚型更常用,步骤如下:
- 初始化:每个样本单独为一个簇,计算初始距离矩阵(如欧氏距离、曼哈顿距离)。
- 迭代合并:
- 找到距离最近的两个簇,合并为新簇。
- 更新距离矩阵,选择链接标准(Linkage Criteria)重新计算簇间距离。
- 终止条件:所有样本合并为单一簇,或达到预设簇数。
- 输出层次结构:生成树状图(Dendrogram),记录合并顺序与距离。
关键参数:
- 链接标准:
- 单链接(Single Linkage) :以两簇中最近样本距离为准,易形成链状结构。
- 全链接(Complete Linkage) :以两簇中最远样本距离为准,倾向于紧凑簇。
- 平均链接(Average Linkage) :取两簇所有样本对的平均距离,平衡链式与紧凑性。
- 距离度量:欧氏距离(连续型数据)、余弦相似度(文本)、Jaccard距离(集合数据)等。
二、层次聚类的数据可视化方法
1. 树状图(Dendrogram)
-
结构与解读:
- 纵轴:表示簇间合并的距离(异质性),高度越高,合并的簇差异越大。
- 横轴:样本或簇的标签,排列顺序反映合并路径。
- 切割高度选择:通过水平线切割树状图确定簇数(如图1)。
示例:基因表达数据中,树状图可显示样本间的表达相似性,如Sample 2与Sample 3最相似,而Sample 5差异显著。
2. 热力图(Heatmap)结合树状图
-
应用场景:展示高维数据矩阵(如基因表达矩阵)中样本与特征的双重聚类结果。
-
实现方式:
- 行/列树状图:通过层次聚类对行(如基因)和列(如样本)分别聚类。
- 颜色编码:用颜色深浅表示数值大小(如红色高表达,蓝色低表达)。
案例:在癌症分型中,热力图可同时显示基因簇(左侧树状图)与患者样本簇(上方树状图),揭示特定基因表达模式与疾病亚型的关联。
3. 树状热图(Dendritic Heatmap)
- 创新点:结合树状图与热图,动态展示不同聚类阈值下表型与基因型的分化关系。例如,在进化生物学中,颜色表示表型差异(如GC含量),树状结构反映基因型聚类层次。
4. 交互式可视化工具
- R的idendro包:支持树状图的缩放、平移及聚类选择,并与散点图、平行坐标图联动,增强探索性分析。
- Python的Plotly:生成交互式树状图,用户可悬停查看节点信息或调整切割高度。
三、可视化工具与代码示例
1. Python实现(scikit-learn + Matplotlib/Seaborn)
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
import seaborn as sns
# 生成示例数据
X = ... # 数据矩阵
# 层次聚类
Z = linkage(X, method='average', metric='euclidean') # 计算链接矩阵
# 绘制树状图
plt.figure(figsize=(10, 6))
dendrogram(Z, labels=labels)
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Samples')
plt.ylabel('Distance')
plt.show()
# 绘制热力图(结合Seaborn)
sns.clustermap(X, method='average', metric='euclidean',
row_cluster=True, col_cluster=True,
cmap='viridis', figsize=(12, 10))
plt.show()
2. R实现(ggtree + heatmap)
library(ggtree)
library(pheatmap)
# 层次聚类
hc <- hclust(dist(data), method = "average")
# 树状图
ggtree(hc) + geom_tiplab()
# 热力图
pheatmap(data, clustering_method = "average",
clustering_distance_rows = "euclidean",
clustering_distance_cols = "euclidean")
四、应用案例与注意事项
1. 生物信息学
- 基因表达分析:通过热力图与树状图识别患者亚群及差异表达基因簇,辅助疾病分型与靶点发现。
- 物种进化研究:树状热图展示基因型聚类与表型(如抗药性)的关联,揭示进化路径。
2. 商业分析
- 用户分群:电商数据中,树状图切割确定客户细分策略,热力图显示购买行为模式。
3. 注意事项
- 计算效率:HC的复杂度为O(n³),大规模数据需采用优化算法(如快速层次聚类)或降维处理。
- 距离选择:不同距离度量与链接标准可能导致结果差异,需结合领域知识验证。
- 可视化优化:避免树状图节点重叠(调整分支角度)、热图颜色映射需符合数据分布。
五、总结
层次聚类的可视化不仅是技术展示,更是数据探索与洞见发现的核心工具。树状图揭示层次关系,热图呈现数值分布,而交互式工具增强了动态分析能力。结合领域需求选择合适方法(如基因研究常用双聚类热图),并关注计算效率与可解释性,方能最大化HC在复杂数据中的价值。