层次聚类(Hierarchical Clustering)是一种常用的聚类分析方法,旨在通过构建一个树形结构(也称为树状图,Dendrogram)来表示数据的层次关系。与K均值聚类不同,层次聚类不需要预先指定簇的数量,而是通过逐步合并(或拆分)数据点形成一个聚类树,用户可以根据需求选择合适的层次(簇数)来划分数据。
层次聚类有两种主要的策略:凝聚式(Agglomerative)和分裂式(Divisive)。
核心概念:
-
凝聚式层次聚类(Agglomerative Clustering):
- 从每个数据点开始,将每个数据点视为一个单独的簇。
- 在每一步中,选择两个最近的簇合并为一个新的簇,直到最终所有数据点合并成一个簇,或者满足停止条件(如达到预定簇数)。
- 该方法从底向上逐步构建树形结构(自底向上的聚类过程)。
-
分裂式层次聚类(Divisive Clustering):
- 从一个包含所有数据点的大簇开始。
- 在每一步中,将一个簇拆分为两个簇,直到每个簇只包含一个数据点,或者满足停止条件。
- 该方法从顶向下逐步构建树形结构(自顶向下的聚类过程)。
-
距离度量:
- 层次聚类的核心是计算簇与簇之间的距离。常见的距离度量方式有:
- 欧几里得距离:常用于数值数据。
- 曼哈顿距离:对某些类型的数值数据更有效。
- 余弦相似度:常用于文本数据。
- 层次聚类的核心是计算簇与簇之间的距离。常见的距离度量方式有:
-
簇间距离的计算方法:
在合并(或拆分)簇时,需要定义簇之间的距离。常见的计算簇间距离的方法包括:- 单链接(Single linkage):簇间距离为两个簇中距离最小的两个点的距离。
- 全链接(Complete linkage):簇间距离为两个簇中距离最远的两个点的距离。
- 均值链接(Average linkage):簇间距离为两个簇中所有点对之间的平均距离。
- 中心链接(Centroid linkage):簇间距离为两个簇的质心之间的距离。
-
树状图(Dendrogram):
- 树状图是一种图形化表示层次聚类过程的方式,展示了簇之间的合并顺序以及每次合并时簇间的距离。
- 通过截断树状图,可以选择最终聚类的数量。例如,可以在树状图中选择一个阈值,所有在该阈值以下的合并都被视为同一个簇。
算法步骤(以凝聚式层次聚类为例):
-
初始化:
- 将每个数据点视为一个独立的簇。
-
计算距离矩阵:
- 计算每对簇之间的距离,形成距离矩阵。最初每个簇的“距离”就是簇内数据点之间的距离。
-
合并最相似的簇:
- 每次选择距离最小的两个簇,将它们合并成一个新的簇。
-
更新距离矩阵:
- 合并簇后,需要更新距离矩阵,计算新簇与其他簇的距离。
-
重复步骤3和4:
- 继续合并最相似的簇,直到满足停止条件(如达到指定簇数或所有数据点合并成一个簇)。
-
生成树状图:
- 构建树状图,记录每次合并时簇间的距离,可以在树状图中选择合适的高度来划分簇的数量。
关键点:
- 不需要预先指定K值:与K均值聚类不同,层次聚类不需要预先指定簇的数量,聚类结果是层次化的,可以通过树状图选择合适的簇数。
- 树状图:树状图是层次聚类的输出,可以通过调整树状图的截断高度来得到不同数量的簇。
- 距离度量:层次聚类依赖于簇之间的距离计算,不同的距离度量方式(如欧几里得距离、曼哈顿距离等)会影响聚类结果。
- 簇的合并策略:簇合并(或拆分)的策略(如单链接、全链接、均值链接等)也会对最终结果产生影响。
优缺点:
-
优点:
- 不需要指定K值:层次聚类的一个重要优点是它不需要用户预先指定簇的数量(K值),能够自动生成聚类的层次结构。
- 结果可解释性强:通过树状图的形式,层次聚类能够提供清晰的聚类过程展示,便于理解。
- 处理小规模数据较好:对于中小型数据集,层次聚类算法的计算和内存开销较小,且容易实施。
-
缺点:
- 计算复杂度高:层次聚类的时间复杂度通常为O(n²),适合用于小规模数据集,对于大规模数据集的计算效率较低。
- 对噪声和离群点敏感:层次聚类可能会受到噪声和离群点的影响,导致不理想的聚类结果。
- 不可并行化:由于每次合并(或拆分)都需要重新计算距离矩阵,层次聚类算法通常无法并行化,计算速度较慢。
- 结果不稳定:不同的距离度量方法和簇合并策略可能导致不同的聚类结果。
应用场景:
- 生物信息学:在基因表达数据分析、蛋白质序列分析等领域,层次聚类可以帮助发现基因或蛋白质的相似性。
- 文档聚类:在文本挖掘中,层次聚类能够将语义相似的文档聚集在一起,常用于信息检索和自动分类。
- 图像分割:层次聚类可用于图像分割,通过将相似的像素分成一个簇来处理图像数据。
- 市场分析:帮助市场研究人员发现不同类型的客户群体、产品群体等。
总结:
层次聚类是一种不需要预先指定簇数的聚类方法,适用于那些数据中存在自然层次关系的情况。它通过构建树状图展示数据点之间的聚类层次,能够有效发现数据的内在结构。尽管层次聚类算法计算复杂度较高,不适用于大规模数据集,但它在小型数据集上的表现非常出色,且能够提供清晰的聚类过程,适用于各种领域的探索性数据分析。