层次聚类分为两种:
(1) 凝聚的层次聚类:自底向上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为更大的簇,直到所有的对象都在同一个簇中,或者满足终止条件。
(2) 分类的层次聚类:自顶向下的策略。
AGNES算法
AGNES(Agglomerative Nesting) 是凝聚的层次聚类算法,如果簇C1中的一个对象和簇C2中的一个对象之间的距离是所有属于不同簇的对象间欧式距离中最小的,C1和C2可能被合并。这是一种单连接方法,其每个簇可以被簇中的所有对象代表,两个簇之间的相似度由这两个簇中距离最近的数据点对的相似度来确定。
算法描述:
输入:包含n个对象的数据库,终止条件簇的数目k
输出:k个簇
(1) 将每个对象当成一个初始簇
(2) Repeat
(3) 根据两个簇中最近的数据点找到最近的两个簇
(4) 合并两个簇,生成新的簇的集合
(5) Until达到定义的簇的数目
算法性能:
(1) 简单,但遇到合并点选择困难的情况。
(2) 一旦一组对象被合并,不能撤销
(3) 算法的复杂度为O(n的平方),不适合大数据集计算DIANA算法
DIANA(Divisive Analysis)算法属于分裂的层次聚类,首先将所有的对象初始化到一个簇中,然后根据一些原则(比如最邻近的最大欧式距离),将该簇分类。直到到达用户指定的簇数目或者两个簇之间的距离超过了某个阈值。
DIANA用到如下两个定义:
(1) 簇的直径:在一个簇中的任意两个数据点都有一个欧氏距离,这些距离中的最大值是簇的直径
(2) 平均相异度(平均距离):
算法描述:
输入:包含n个对象的数据库,终止条件簇的数目k
输出:k个簇,达到终止条件规定簇数目
(1) 将所有对象整个当成一个初始簇
(2) For ( i=1;i!=k;i++) Do Begin
(3) 在所有簇中挑选出具有最大直径的簇;
(4) 找出所挑出簇里与其他点平均相异度最大的一个点放入splinter group,剩余的放入old party中。
(5) Repeat
(6) 在old party里找出到splinter group中点的最近距离不大于old party中点的最近距离的点,并将该点加入splinter group
(7) Until 没有新的old party的点被分配给splinter group;
(8) Splinter group 和old party为被选中的簇分裂成的两个簇,与其他簇一起组成新的簇集合
(9) END
算法性能:
缺点是已做的分裂操作不能撤销,类之间不能交换对象。如果在某步没有选择好分裂点,可能会导致低质量的聚类结果。大数据集不太适用。