上一篇讲了Partitional Clustering,这一篇聚类的另一种方式,层次分类。 (分享)
Hierarchical CLustering(层次分类)
层次分类方式
(1)Agglomerative(凝聚)
(2)Divisive(分裂)
凝聚的步骤
首先,我用一个通俗的例子来说明下,比如要把10位学生进行聚类,如果我们聚类的标准是空间上的距离,就是说A离B站的近,就认为他们是同一类,而不是根据他们的兴趣爱好,这就是距离的定义,那这样子的话,我们首先算出每两位同学之间的距离,把离得最近的两人先归为一类,那既然是同一类,那就是同一个群体,再算下这9个群体之间的距离,把距离最小的距离再归为一类,直至只有一个类。这就是凝聚。也可以用下面的几点表示。
(1)计算proximity矩阵,就是每两个点(类)之间的距离或者相似度
(2)将距离最短(相似度最高)的点合并在一起
(3)重复(1)(2)步骤,直到最后只有一个类
涉及到的问题
我们很容易就可以想到以两个人为集体跟另一人的空间距离是多少,乃至两个集体之间的距离该如何定义?也正是这个类距离定义的不同,就有了很多不同的算法。
下面给出了定义两个类的相似度的方法,我们知道相似度越高,距离越小。
(1)MIN,以两个Cluster中最近的两个对象的距离作为距离
(2)MAX,以两个Cluster中最远的两个对象的距离作为距离
(3)Group Average,以两个Cluster中所有对象的距离的平均值作为距离
(4)Distance Between Centorids,以两个Cluster中中心的距离作为距离
我们以MIN为例,来说一个例子
(1)我们得到了每两个点之间的相似度,如下
(2)我们发现对象1和对象2之间的相似度是最高的,0.9,所以这两个类得先合并
(3)因为是根据两个类中最短距离作为距离的,所以我们可以直接看,没必要再重新算,我们发现对象4和对象5之间的相似度是0.8,所以将这两个类合并。
(4)接下来,我们发现对象3跟{对象1,对象2}的相似度是0.1,对象3跟{对象4,对象5}的相似度是0.3,因此,我们将对象3跟{对象4,对象5}合并。我们可以得到如下的结果。
当然,我发现MIN是最简单的,但是也有优点,那就是不care类的大小,但是对噪声点敏感。比MIN稍显复杂的是MAX,也可以直接看一个矩阵就能确定聚类结果,下面给出用MAX的聚类结果,另外提一下,MAX的特点正好跟MIN完全相反。
至于其他根据Group Average和Distance Between Centorids,每次合并之后,要重新算下类之间的相似度。
小结
在凝聚过程中,最主要的是定义两个类之间的距离(相似度),对于同一堆数据,不同的距离定义,会得到不同的结果,每个定义都有各自的优势和不足,只有最合适的,没有最好的。根据实际问题实际分析,才是王道。