分裂层次聚类
白话文
分裂层次聚类算法与聚集层次聚类正好相反,它是从顶层开始,将所有的数据点看作一个大群组,然后逐步细分成更小的群组。
让我们继续用《任家风云》的剧中角色打比方。
- 整个剧组是一个大家庭:假设一开始,《任家风云》剧中所有的角色就像一个大家族一样聚集在一起。在分裂层次聚类算法中,这就相当于最初只有一个包含所有数据点的大类群。
- 识别主要分支:然后,我们开始寻找最明显的不同之处来将这个大家族分成几个主要分支。比如,我们可以先区分出任家的成员和其他非任家的角色。在聚类算法中,这就像是找出最大的差异,将大群组分裂成几个更小的群组。
- 继续细化分类:接下来,我们继续观察这些分支中的细节,比如在任家这一支中,我们可以根据亲密程度再分成核心家庭和亲戚。在聚类中,这就是进一步将这些小群组分裂成更小的类群。
- 详尽地分裂:我们重复这个过程,每次都基于角色之间的关系来进一步细分。比如,核心家庭可以根据居住关系再细分成单个的小家庭单元。在聚类中,这意味着我们继续分裂每个群组,直到达到所需的细致程度。
- 形成清晰的层次结构:随着我们不断地分裂,剧中角色之间的层次关系就变得越来越清晰。在分裂层次聚类算法中,这就相当于构建一棵从顶向下生长的树状图,显示了从一个大群组到多个小群组的层次分化过程。
- 确定最终的小组:最后,我们会根据需要在某个层次上停止分裂,比如我们可能只关心核心家庭的关系,不需要细分到每个单独的个体。在聚类算法中,这就是决定何时停止分裂,以确定最终的类群数量。
通过这种方式,分裂层次聚类算法让我们从一个大概念(整个剧组)开始,逐步细分到具体的个体(单个角色),帮助我们理解和组织复杂的数据结构。
定义与原理
分裂层次聚类算法(Divisive Hierarchical Clustering)是一种自顶向下的聚类分析方法,它以一个将所有对象视为单个簇开始,逐步将簇分裂成更小的簇,直至每个簇只包含一个对象或达到用户设定的条件为止。该算法与凝聚层次聚类算法相反,凝聚层次聚类是自底向上的合并方法。
分裂层次聚类算法的核心思想是,先将整个数据集视为一个大的簇,然后通过某种评价标准,不断地将当前簇分裂成两个或多个子簇。这种评价标准通常与簇内的相似度和簇间的差异度有关,目的是使得分裂后的子簇内部数据点的相似度更高,而不同子簇间的数据点的差异度更大。
分裂层次聚类的流程可以总结如下:
- 初始化:将所有的数据点看作一个簇。
- 分裂标准:选择一个分裂标准,比如簇的直径、平均距离等。
- 分裂操作:根据分裂标准,将当前簇分裂成两个或多个子簇。
- 重复步骤2和3,直到每个簇只包含一个对象或满足用户定义的停止条件。
分裂的过程可以用树状图(dendrogram)来表示,树的根节点表示所有数据点构成的大簇,树的叶节点表示最终的单一数据点簇。
我们常用的分裂标准之一是最大化簇间距离的平均值,其公式可以表示为:
Δ(Ci,Cj)=∣Ci∣∣Cj∣1x∈Ci,y∈Cj∑d(x,y).
其中,Δ(Ci,Cj)是两个簇 Ci 和 Cj 之间的平均距离,d(x,y) 是数据点 x 和 ( y ) 之间的距离,而 ∣Ci∣ 和 ∣Cj∣ 分别是簇 Ci 和 Cj 的大小(即包含的数据点数)。
分裂层次聚类算法的一个关键挑战在于选择合适的分裂点,这通常需要根据具体数据和问题背景灵活决定。由于该算法从全局视角出发,可能比凝聚层次聚类更能发现数据的全局结构,但也更加计算密集,尤其是在数据量大的情况下。
代码
分裂层次聚类算法通常是自上而下的方法,但是scikit-learn没有直接的实现,我们认为在实现层次聚类时,聚集层次聚类和分裂层次聚类的效果是相同的。