前面谈到的聚类算法,最终输出的结果都是被被称为“flat”的,即平坦的,然后存在这样的情况,即数据集中是有层次的。例如,待分类的数据是3个家庭的成员,其中可能包括爷爷,奶奶,爸爸,妈妈,儿子,女儿。不同的家庭最终会形成一个树结构(这个例子可能不太合适,但是大概能说明问题,嘻嘻),在这种情况下,使用“flat”类型的聚类算法,例如k-means则无法揭示数据之间的层次关系,于是Hierarchical clustering应运而生。(Richard O. Duda的Pattern Classification这本书中,对于hierarchical clustering的定义是:If the sequence has the property that whenever two samples are in the same cluster at lever k they remain together at all higher levels, then the sequence is said to be a hierarchical clustering。感兴趣的同学可以看下哈)
Hierarchical clustering(层次聚类),顾名思义就是最终输出的cluster是可见层次结构的。最常见的对层次聚类结果的描述是一个树,称为dendrogram(系统树图),展示了数据集中的数据点的组织结构。
层次聚类策略分为两种,分别是agglomerative(自底而上的)和divisive(自上而下的)。
前者认为初始情况下数据集中数据点自成一个cluster,通过不断将最近的cluster合并,输出一系列层次清楚的聚类结果,一般对有N个数据点的数据集,第一次运算,认为有N个cluster,通过逐步合并,最终到只有一个cluster。
后者则认为初始情况下数据集是一个大的cluster,通过将cluster中最不相似的连接(一个连接对应两个数据点)断开,实现数据集的分裂。
从描述上将,层次聚类是很简单的,但是真正执行起来,需要注意的东西还很多。例如对于agglomerative策略,如何定义两个cluster之间的相似程度?divisive中选择怎样的连接断开?即使选择好了相似测度,由于频繁数据搜索带来的时间和计算复杂度也是很高的。
相比于前面谈到的聚类算法,hierarchical clustering不需要预先确定类别数,是一大优势,但也由于上述缺点,导致真正用的并没有k-means等广泛。但是这种分层的思想是可以借鉴的,下面可能会专门讲一篇文章:Multi-layer affinity propagation,就是使用了分层的思想,虽然不尽相同。