一、划分法
划分方法的基本思想是:将数据集合 D 中的n 个元素进行划分,形成一个平面的类结构,同时满足如下要求:
(1)每个组至少包含一个对象;
(2)每个对象必须属于且只属于一个组;
(3)指定一个相异函数 F 来计算元素之间的差异,使得在同一个簇中的对象之间尽可能的相近或相关,而不同簇中的对象之间尽可能远离或不同
代表算法:k-means、k-中心法、CLARA(cluster large application)
<1>k-means算法
1、选择k个点作为初始质心
2、将每个点指派到最近的质心,形成k个簇(聚类)
3、重新计算每个簇的质心
4、重复2-3直至质心不发生变化
优点:时间复杂度低O(knt),k是簇数,t是迭代数,n是样本点数
缺点:不能处理非球形数据、需要确定k值、对离群点敏感
<2>k-中心法
1、随机选择k个点作为中心点
2、计算剩余的点到这k个中心点的距离,每个点被分配到最近的中心点组成聚簇
3、随机选择一个非中心点Or,用它代替某个现有的中心点Oj,计算这个代换的总代价S
4、如果S<0,则用Or代替Oj,形成新的k个中心点的集合
5、重复2,直至中心点集合不再发生变化
K-中心法的典型实现:RAM
RAM使用离差平方和来计算成本S
优点:k-中心法的优点是对离群数据不敏感
缺点:时间复杂度更高
<3>CLARA:用于对大数据集进行快速聚类
1、从大数据集中抽取少量样本
2、对抽取的样本进行PAM聚类
3、从步骤2可以获得聚类中心,使用这组聚类中心对大数据集进行聚类,分类原则是按样本点离各聚类中心距离最短者划分簇
二、层次法
层次聚类算法是将所有的样本点自底向上合并组成一棵树或者自顶向下分裂成一棵树的过程。这两种方式分别称为凝聚和分裂
1、开始时,每个样本各自作为一类
2、规定某种度量作为样本之间的距离及类与类之间的距离,并计算之
3、将距离最短的两个类合并为一个新类
4、重复2-3,即不断合并最近的两个类,每次减少为一个类,直至所有样本被合并为一类(实际情况是到达指定的簇数k或者簇之间的距离小于某一个阀值)
常用的两个簇之间的距离度量:
类平均法、重心法、最长距离法、最短距离法、密度估计法、离差平方和法
详见:点击打开链接
优点:强聚类能力,聚类效果好,对噪声点不敏感
缺点:时间复杂度高、不能回溯处理
BIRCH算法:
是为大量数值数据聚类设计的,它将层次聚类(在初始微聚类阶段)与诸如迭代地划分这样的其他聚类算法(在其后的宏聚类阶段)集成在一起。它克服了凝聚聚类方法所面临的两个困难:(1)可伸缩性(2)不能撤销先前步骤所做的工作
主要包括两个阶段:
阶段1:BIRCH扫描数据库,建立一颗存放在内存的初始CF树,它可以被看做数据的多层压缩,试图保留数据的内在聚类结构
阶段2:BIRCH采用某个(选定的)聚类算法对CF树的叶节点进行聚类,把稀疏的簇当做离群点删除,而把稠密的簇合并为更大的簇
更多BIRCH算法:点击打开链接
三、密度法
相关概念:
DBSCAN算法思想:
1、指定合适的r和M
2、计算所有的样本点,如果点p的r邻域里有超过M个点,则创建一个以p为核心点的新簇
3、反复寻找这些核心点直接密度可达的点,将其加入到相应的簇,对于核心点发生"密度相连"状况的簇,给予合并
4、当没有新的点可以被添加到任何簇,算法结束
优点:发现任意形状的聚类簇、能够检测异常点
缺点:需要给定簇最小对象数以及邻域半径
四、网格法(没怎看懂,还得继续研究)
基本思想是将数据空间划分成网格单元,然后由密度足够大的网格单元形成簇。划分网格单元的方法是将每个属性的可能值分割成许多相邻的区间,创建网格单元的集合。每个对象落入一个网格单元,网格单元对应的属性区间包含对象值。
五、模型法(没怎看懂,还得继续研究)
基于模型的方法为每一个簇假定一个模型,寻找数据对给定模型的最佳拟合。
一个基于模型的算法可能通过构建反映数据点空间分布密度函数来定位聚类。它
也基于标准的统计数字自动决定聚类的数目,考虑“噪声”数据或孤立点,从而产生健壮的聚类方法。这样的方法经常基于这样的假设:数据是根据潜在的概率分布生成的。
基于模型的方法主要有两类:统计学方法和神经网络方法。
关于簇数k值的选择
1、经验判断,例如样本点数目为n,则取k=sqrt(n/2)
2、肘方法
首先知道什么是离差平方和:在n个数据中取均值Xavg,||Xi-Xavg||的平方再求和
3、PSF或PST2这类统计量
伪F统计量:
伪统计量:
各个变量的含义以及为什么这样做请看链接:点击打开链接
可以通过先观察层次聚类时的PSF和PST2的取值决定聚类簇数,再用来做k-means或者k-中心法
4、信息论方法与信息准则(有待研究)
5、交叉验证(有待研究)