目录
聚类的目的
聚类划分
k-means算法
k-means算法流程
k-means优点与缺点
K-means++与K-means
AGNES算法和DIANA算法
AGNES和DIANA算法优缺点
CURE算法
CURE算法的特点
BIRCH算法
BIRCH算法优缺点
DBSCAN算法
DBCSAN算法的特点
Canopy算法
Canopy算法的特点
聚类的目的就是把不同的数据点按照它们的相似与相异度分割成不同的簇,确保每个簇中的数据都是尽可能相似,而不同簇的数据尽可能相异。
从模式识别的角度来讲,聚类就是在发现数据中潜在的模式,帮助人们 进行分组归类已达到更好理解数据的分布规律。
基于划分的聚类算法:K-means,
基于层次的聚类算法: AGNES, DIANA,
基于密度的聚类算法:DBSCAN、Canopy,
基于网格的方法(grid-based method)、
基于模型的方法(model-based method)等
1.选择聚类的个数k(kmeans算法传递超参数的时候,只需设置最大的K值)
2.任意产生k个簇,然后确定簇中心,或者直接随机生成k个中心。
3.将数据集中的每个点分配到距离最近的簇。
4.再计算其新的簇中心。
5.重复以上步骤直到满足收敛要求。(通常就是确定的簇中心点不再改变。)
优点:
1、原理简单(靠近中心点) ,实现容易
2、聚类效果中上(依赖K的选择)
3、空间复杂度o(N)时间复杂度o(IKN,N为样本点个数,K为中心点个数,I为迭代次数)
缺点:
1、对离群点, 噪声敏感 (中心点易偏移)
2、很难发现大小差别很大的簇及进行增量计算
3、结果不一定是全局最优,只能保证局部最优(与K的个数及初值选取有关)
注:K-means++与K-means的区别,K-means++仅仅与K-means在第一次确定簇中心时步骤不同,其他步骤都一样,K-means++从数据集中选取了K个相距最远的点作为簇中心(先从数据集中随机选取一个点作为簇中心点,然后再从数据集中选出一个距离该簇中心点最远的簇中心点,然后再从数据集中选出一个距离上面两个簇中心点都最远的簇中心点,直至选出K个点,即选出K个相距最远的点)。
主要在不同层次对数据集进行逐层分解,直到满足某种条件为止;先计算样本之间的距离。每次将距离最近的点合并到同一个类,然后再计算类与类之间的距离,将距离最近的类合并为一个大类。不停的合并,直到合成一个类。
AGNES算法思想(自底向上的凝聚方法):
1.初始每个数据都是一个簇;
2.寻找每个簇之间的距离,获取距离列表;
3.合并距离最近的两个簇Ci,Cj,并删除Cj,更新距离列表,使簇个数减1;
4.重复第3步,直到簇个数等于所需个数k。
DIANA(DIvisive ANAlysis)(自上向下的分裂方法)先将所有的样本归为一个簇,然后按照某种规则逐渐分裂为越来越小的簇,直到达到某个停止条件,如指定的簇数目等。分裂方式如下:
1.在同一个簇c中计算两两样本之间的距离,找出距离最远的两个样本a、b;
2.将样本a、b分配到不同的类簇c1、c2中;
3.计算c中剩余的其他样本分别和a、b的距离,若dist(a)
简单,理解容易
合并点/分裂点选择不太容易
合并/分裂的操作不能进行撤销
大数据集不太适合(数据量大到内存中放不下)
执行效率较低O(t*n2),t为迭代次数,n为样本点数
CURE(Clustering Using REpresentatives)该算法先把每个点作为一个簇,然后合并距离最近的簇直到簇个数达到要求为止。CURE和AGNES算法的区别是:不是使用所有点或质心+距离来表示一个簇,而是从每个簇中抽取固定数量、分布较好的点作为簇的代表点,并将这些代表点乘以一个适当的收缩因子,使它们更加靠近类中心点。代表点的收缩特性可以调整模型匹配非高斯分布的应用场景,而且收缩因子的使用可以减少噪音数据对聚类的影响。
CURE算法实现过程如下:
1从原始数据中随机抽样,得到数据集S;
2对S进行分区,在内存中对每个分区分别进行局部聚类;
3如果一个类簇增长缓慢或不增长,说明它是噪声,要去除掉;
4新的类簇由固定个数的代表点经过收缩后表示;
5对磁盘上整个原始数据根据代表点进行全局聚类。
由于CURE算法的时间复杂度较高,可以使用堆、k-d树、随机抽样和分区等技术改善效率;CURE的聚类效果受参数的影响较大,如随机抽样的比例、聚类个数、收缩因子的设定等。
BIRCH算法(平衡迭代削减聚类法)(重要):聚类特征使用3元组进行一个簇的相关信息,通过构建满足分枝因子和簇直径限制的聚类特征树来求聚类,聚类特征树其实是一个具有两个参数分枝因子和类直径的高度平衡树;分枝因子规定了树的每个节点的子女的最多个数,而类直径体现了对这一类点的距离范围;非叶子节点为它子女的最大特征值;聚类特征树的构建可以是动态过程的,可以随时根据数据对模型进行更新操作。
优缺点:
适合大规模数据集,线性效率;
只适合分布呈凸形或者球形的数据集、需要给定聚类个数和簇之间的相关参数。
DBSCAN:
首先了解三个概念:核心点,边界点和噪声点
邻域半径R内样本点的数量大于等于minpoints的点叫做核心点。
不属于核心点但在某个核心点的邻域内的点叫做边界点。
既不是核心点也不是边界点的是噪声点。
再了解四4种点的关系:密度直达,密度可达,密度相连,非密度相连
如果P为核心点,Q在P的R邻域内,那么称P到Q密度直达。任何核心点到其自身密度直达,密度直达不具有对称性,如果P到Q密度直达,那么Q到P不一定密度直达。
如果存在核心点P2,P3,……,Pn,且P1到P2密度直达,P2到P3密度直达,……,P(n-1)到Pn密度直达,Pn到Q密度直达,则P1到Q密度可达。密度可达也不具有对称性。
如果存在核心点S,使得S到P和Q都密度可达,则P和Q密度相连。密度相连具有对称性,如果P和Q密度相连,那么Q和P也一定密度相连。密度相连的两个点属于同一个聚类簇。
如果两个点不属于密度相连关系,则两个点非密度相连。非密度相连的两个点属于不同的聚类簇,或者其中存在噪声点
DBSCAN 算法对簇的定义很简单,由密度可达关系导出的最大密度相连的样本集合,即为最终聚类的一个簇。
DBSCAN 算法的簇里面可以有一个或者多个核心点。如果只有一个核心点,则簇里其他的非核心点样本都在这个核心点的 Eps 邻域里。如果有多个核心点,则簇里的任意一个核心点的 Eps 邻域中一定有一个其他的核心点,否则这两个核心点无法密度可达。这些核心点的 Eps 邻域里所有的样本的集合组成一个 DBSCAN 聚类簇。
DBSCAN算法的描述如下。
输入:数据集,邻域半径 Eps,邻域中数据对象数目阈值 MinPts;
输出:密度联通簇。
处理流程如下。
1)从数据集中任意选取一个数据对象点 p;
2)如果对于参数 Eps 和 MinPts,所选取的数据对象点 p 为核心点,则找出所有从 p 密度可达的数据对象点,形成一个簇;
3)如果选取的数据对象点 p 是边缘点,选取另一个数据对象点;
4)重复(2)、(3)步,直到所有点被处理。
DBSCAN 算法的计算复杂的度为 O(n²),n 为数据对象的数目。这种算法对于输入参数 Eps 和 MinPts 是敏感的。
Canopy算法流程
1、将数据集向量化得到一个list后放入内存,选择两个距离阈值:T1和T2,其中T1 > T2,T1和T2的值可以用交叉校验来确定;
2、从list中任取一点P,用低计算成本方法快速计算点P与所有Canopy之间的距离(如果当前不存在Canopy,则把点P作为一个Canopy),如果点P与某个Canopy距离在T1以内,则将点P加入到这个Canopy;
3、如果点P曾经与某个Canopy的距离在T2以内,则需要把点P从list中删除,这一步是认为点P此时与这个Canopy已经够近了,因此它不可以再做其它Canopy的中心了;
4、重复步骤2、3,直到list为空结束。
Canopy聚类虽然精度较低,但其在速度上有很大优势,因此可以使用Canopy聚类先对数据进行“粗”聚类,得到k值后再使用K-means进行进一步“细”聚类。