聚类算法 - 凝聚层次聚类

一、定义

层次聚类就是通过对数据集按照某种方法进行层次分解,直到满足某种条件为止。按照分类原理的不同,可以分为凝聚和分裂两种方法。

层次聚类方法对给定的数据集进行层次的分解,直到某种条件满足为止。具体又可分为凝聚分裂的两种方案:

1、凝聚

凝聚的层次聚类是一种自底向上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到所有的对象都在一个簇中,或者某个终结条件被满足,绝大多数层次聚类方法属于这一类,它们只是在簇间相似度的定义上有所不同。.


image.gif

2、分裂

分裂的层次聚类与凝聚的层次聚类相反,采用自顶向下的策略,它首先将所有对象置于同一个簇中,然后逐渐细分为越来越小的簇,直到每个对象自成一簇,或者达到了某个终止条件。


image.png

本篇主要讨论凝聚的层次聚类。

二、凝聚层次聚类算法步骤

第一步,将训练样本集中的每个数据点都当做一个聚类
第二步,计算每两个聚类之间的距离,将距离最近的或最相似的两个聚类进行合并,如同下图中的p1和p2、p5和p6
第三步,重复上述步骤,依旧计算每个聚类的距离,当然这次因为已经有聚合起来的簇了因此距离的计算方式有多种:【单链】簇内的最近的点的距离、【全链】簇内的最远的点的距离、【组平均】簇的平均距离、簇的相似度等
第四步,直到得到的当前聚类数是合并前聚类数的10%,即90%的聚类都被合并了;当然还可以设置其他终止条件,这样设置是为了防止过度合并,此时需要几个簇,那么就可以用一条横线去截取分出的簇,如下图分出3类、4类、5类的横线截止

image.png

ps:距离在通常的情况下可以计算欧几里得距离,就是普通的直线距离,还可以计算余弦相似度
具体的动画效果可以参考视频,这是---->传送门

三、优点与缺点

1、优点

1)距离和规则的相似度容易定义,限制少
2)不像kmeans,不需要预先制定聚类数
3)可以发现类的层次关系

2、缺点

1)计算复杂度太高
2)奇异值也能产生很大影响
3)由于根据距离来聚合数据,算法很可能聚类成链状

你可能感兴趣的:(聚类算法 - 凝聚层次聚类)