1、基于划分的聚类算法
基于划分的聚类算法 主要通过聚类中心的迭代重置,直到达到“簇内点足够近,簇间点足够远”的目标效果,完成样本集的最优化分。其算法优点是时间、空间复杂度低,可以处理大规模数据集。缺点包括容易陷入局部最优,对初始聚类中心的选取十分敏感,无法处理噪声和离群点,不能解决非凸数据等。其代表算法包括K-means、CLARANS和 CLARA。以 K-means 为例,算法流程为:
- 步骤 1:初始的类簇中心采用随机选择的方式选取,一般人为设定为 K 个;
- 步骤 2:对剩余对象,计算其与选取的各类簇中心的距离,将其分配给距离最近的簇;
- 步骤 3:重新计算每个簇的平均值,将其作为新的聚类中心;
- 步骤 4:重复步骤 2 和 3,直到聚类结果不再变化;
2、基于密度的聚类算法
基于密度的聚类算法其算法原理是通过计算数据样本分布的疏密情况,将高密度区域的点划分为同一个类簇。这种方式可以处理具有复杂形状的类簇和噪声数据。DBSCAN 算法是典型的基于密度的聚类算法,能够有效识别任意形状的类簇。缺点是聚类的结果与参数有很大的关系,对于稀疏度差异很大的数据集无法取得很好的聚类效果。其算法步骤为:
- 步骤 1:从数据集中任选一个对象 p;
- 步骤 2:寻找对象 p 的直接密度可达的数据点;
- 步骤 3:若对象 p 存在直接密度可达数据点,则合并生成一个类簇,若不存在,将 p 作为一个边界点选取下一个对象;
- 步骤 4:重复步骤 2 和 3,直到所有点都被处理。
3、基于层次的聚类算法
基于层次的聚类算法无需预先设置类簇个数,而是通过对数据集在不同层次上进行划分来获得树状聚类结构。一般分为两种类型:合并的层次聚类和分裂的层次聚类。前者是一种自底向上的层次聚类算法,从最底层开始,每一次通过合并最相似的类簇来形成上一层次的类簇,直到满足终止条件。后者则是采用自顶向下的方法,从一个包含全部数据点的聚类开始,然后把根节点分裂为一些子类簇,每个子类簇再递归地分裂下去,直到出现只包含一个数据点的类簇出现。这种算法的优点是处理速度很快,仅与类簇个数有关,与数据个数无关,可以解决非球形簇的聚类。其缺点是算法具有明显的贪心特征,一个数据点分配错误,将会出现连带性错误。代表算法包括 BIRCH算法、CURE 算法和 CHAMELEON 算法等。以自底向上的层次聚类算法为例,其算法步骤如下:
- 步骤 1:将每个对象看作一个类簇,计算两两之间的相似性;
- 步骤 2:将相似性最高的两个类簇进行合并成为一个新的类簇;
- 步骤 3:重新计算新的类簇与所有类簇的相似性;
- 步骤 4:重复步骤 2 和 3,直到不再有可合并类簇或者类簇数满足预先设定值。
在第二步中使用到的相似性度量方法,有很多算法,常见的有如下 5 种方法,其中 Ward 法与 Average Linkage 法比较常见:
3.1 单连接算法(SingleLinkage)
对于类 和 ,选择这两个类之间的任意两个对象的最小距离作为他们合并的相似性度量方式,如公式所示:
3.2 全连接算法(CompleteLinkage)
该算法是单连接算法的反面,对于对于类 和 选取两个类中距离最远的任意两个负荷曲线对象作为两个类之间的距离度量方式,如公式所示。然后选取类间距最小的类进行合并。
3.3 平均连接算法(Average-linkage)
该算法的计算量较大,对于类和 ,求两个类之间所有对象两两之间的距离,然后再计算平均值作为两个类的距离。然后选取所有类之间距离最小的两个进行合并,具体如公式:
3.4 Ward法
选择合并之后的类导致的类内离差平方和增加量最小的两个类进行合并。
3.5 质心连接(CentroidLinkage)
对于类类和 ,类之间的距离为聚类中心距离的平方作为距离度量:
4、基于网格的聚类算法
基于网格的聚类算法利用多分辨率形式的网格结构将数据空间划分为一个个的网格单元,并在网格单元上进行类簇划分。优点是处理速度快,与数据对象个数无关。缺点是参数敏感,无法处理不规则分布的数据,处理精度也不高。这类算法通常与基于密度的聚类算法结合从而提高聚类准确度,代表算法有 STING 算法、CLIQUE算]和 WAVE-CLUSTER 算法等。这些算法采用了不同的网格划分方法,但其核心步骤差异不大,如下所示。
- 步骤 1:将数据空间划分为多个互不重叠的网格;
- 步骤 2:对网格内数据进行统计;
- 步骤 3:通过统计信息找到高密度网格单元;
- 步骤 4:将相连的高密度网格单元合并为一个类簇;
- 步骤 5:将低密度网格单元划分给距离最近的高密度网格单元所在类簇中。
5、基于模型的聚类算法
基于模型的聚类算法为每个类簇假设了一个模型,然后利用一个判断机制寻找数据与给定模型的最佳拟合,最后完成聚类。这一类算法主要包括基于概率的模型聚类和基于神经网络的模型聚类。基于概率的模型聚类主要采用了概率生成方法,假定同一类簇中的数据按照同一种概率分布,最常用的即为高斯混合模型(Gaussian Mixture Models, GMM)。基于神经网络的模型聚类最常见的是 SOM 模型,其可以保持原始数据的拓扑特征,把相似的数据分配到同一类。这类算法的优点是其对数据点所属类簇的划分以概率的形式表现,每一类的特征也可用参数表达。缺点是处理效率不高,特别是数据量很少时,聚类效果很差。以 SOM 模型为例,其算法流程如下:
- 步骤 1:先将网络初始化,给输出层的每个节点权重赋值;
- 步骤 2:从输入样本中随机选择一个输入向量,找到与该输入向量距离最小的权重向量;
- 步骤 3:定义获胜单元,在获胜单元的领域内调整权重使其向输入向量靠近;
- 步骤 4:提供新样本,再次进行训练;
- 步骤 5:使邻域半径收缩,降低学习率,重复步骤 2-4,直到满足输出条件,得到聚类结果。