上篇博文简单的讲述了层次聚类的基本概念,接下来就是具体的讲述凝聚的聚类算法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 ,这将影响聚类结果的准确性。