上篇博文简单的讲述了层次聚类的基本概念,接下来就是具体的讲述凝聚的聚类算法AGNES算法与分裂的聚类算法DIANA聚类算法。


  AGNES算法:

  算法描述:

               输入:包含n个对象的数据库,终止条件簇的数目k

               输出:k个簇

     (1)       将每个对象当成一个初始簇

     (2)       Repeat

     (3)       根据两个簇中最近的数据点找到最近的两个簇(这个地方的最近的衡量标准就是上篇博文所讲的四种距离度量方式)

     (4)       合并两个簇,生成新的簇的集合

     (5)       Until达到定义的簇的数目

       算法性能:

    (1)       简单,但遇到合并点选择困难的情况。

一旦一组对象被合并,不能撤销

    (3)       算法的复杂度为O(n的平方),不适合大数据集

   不管是从原理上还是实现上,AGNES算法都显得十分简单。在K-MEANS算法中,初始化中心点的确定可以由AGNES、DIANA算法来大致确定。



  DIANA算法:

  输入:包含n个对象的数据库,终止条件簇的数目k

  输出:k个簇,达到终止条件规定簇数目

//初始化操作

  (2  For ( i=1;i!=k;i++) DoBegin

  (3)   在所有簇中挑选出具有最大直径的簇;

  (4)   找出所挑出簇里与其他点平均相异度最大的一个点放入splinter group,剩余的放入old party中。

  (5)   Repeat

  (6)        在old party里找出到splintergroup中点的最近距离不大于old party中点的最近距离的点,并将该点加入splinter group

  (7)   Until 没有新的old party的点被分配给splintergroup;

  (8) Splinter group 和old party为被选中的簇分裂成的两个簇,与其他簇一起组成新的簇集合。

  (9)END

 

  算法基本思想:每次选出最大的簇,将最大的簇进行分裂为两个簇。

  算法性能:



  层次聚类缺点:

 O(tn2 )t: 迭代次数 n: 样本点数,最明显的一个缺点是不具有再分配能力,即如果样本点 A 在某次迭代过程中已经划分给类簇 C1 ,那么在后面的迭代过程中 A 将永远属于类簇 C1 ,这将影响聚类结果的准确性。