1. 简介
常用聚类方法有:
1. 层次的方法(hierarchical method);
2. 划分方法(partitioning method);
3. 基于密度的方法(density-based method);
4. 基于网格的方法(grid-based method);
5. 基于模型的方法(model-based method)等。
DBSCAN是一种基于密度的空间聚类算法,它不需要定义簇的个数,而是将具有足够高密度的区域划分为簇,并在有噪声的数据中发现任意形状的簇,在此算法中将簇定义为密度相连的点的最大集合。
二十三、经典K-means(划分)算法
- 算法流程
- 随机地选择k个对象,每个对象初始地代表了一个簇的中心;
- 对剩余的每个对象,根据其与各簇中心的距离,将它赋给最近的簇;
- 重新计算每个簇的平均值,更新为新的簇中心;
- 不断重复2、3,直到准则函数收敛。
- K个初始类簇点的选取方法
- 选择彼此距离尽可能远的K个点;
- 先对数据用层次聚类算法进行聚类,得到K个簇之后,从每个类簇中选择一个点,该点可以是该类簇的中心点,或者是距离类簇中心点最近的那个点。
- K值的选择
轮廓系数,求出所有样本的轮廓系数后再求平均值就得到了平均轮廓系数。平均轮廓系数的取值范围为[-1,1],且簇内样本的距离越近,簇间样本距离越远,平均轮廓系数越大,聚类效果越好。那么,很自然地,平均轮廓系数最大的k便是最佳聚类数。
4.5 K均值聚类如何选择初始点
选择聚类中心的个数,选择聚类中心的位置。
那么如何去选择聚类中心的个数呢,通常采用手肘法,从个数较小到个数较大,计算所有点与聚类中心的损失,然后观察损失曲线的拐点(也就是手肘点),通常选取手肘点作为聚类中心的个数。
如何选择聚类中心的位置?这个不鲁棒,对算法影响较大。通常是随机选取一些聚类中心的位置(不一定会在数据点内),称为种子,然后计算所有点与这些种子点的距离,距离种子点近的就认为是这一个簇,然后再在簇内随机选一个点,计算簇内所有点与种子点的均值距离,选取均值距离作为新的种子点。这也是K均值聚类名字的由来。
k-means算法,聚类性能的度量一般分为两类,一类是聚类结果与某个参考模型比较(外部指标),另外是直接考察聚类结果(内部指标)。后者通常有DB指数和DI,DB指数是对每个类,找出类内平均距离/类间中心距离最大的类,然后计算上述值,并对所有的类求和,越小越好。类似k-means的算法仅在类中数据构成簇的情况下表现较好,密度聚类算法从样本密度的角度考察样本之间的可连接性,并基于可连接样本不断扩展聚类蔟得到最终结果。DBSCAN(density-based spatial clustering of applications with noise)是一种著名的密度聚类算法,基于一组邻域参数
进行刻画,包括邻域,核心对象(邻域内至少包含
个对象),密度直达(j由i密度直达,表示j在i的邻域内,且i是一个核心对象),密度可达(j由i密度可达,存在样本序列使得每一对都密度直达),密度相连(xi,xj存在k,i,j均有k可达),先找出样本中所有的核心对象,然后以任一核心对象作为出发点,找出由其密度可达的样本生成聚类蔟,直到所有核心对象被访问过为止。
2. 算法流程
1. 通过检查数据集中每点的Eps邻域来搜索簇,如果点p的Eps邻域包含的点多于MinPts个,则创建一个以p为核心对象的簇;
2. 迭代地聚集从这些核心对象直接密度可达的对象,这个过程可能涉及一些密度可达簇的合并;
3. 当没有新的点添加到任何簇时,该过程结束。
3. 优缺点
3.1 优点
和传统的 k-means 算法相比,DBSCAN 算法不需要输入簇数 k 而且可以发现任意形状的聚类簇,同时在聚类时可以找出异常点;
1. 可以对任意形状的稠密数据集进行聚类,而 k-means 之类的聚类算法一般只适用于凸数据集;
2. 可以在聚类的同时发现异常点,对数据集中的异常点不敏感;
3. 聚类结果没有偏倚,而 k-means 之类的聚类算法的初始值对聚类结果有很大影响。
3.2 缺点
1. 样本集密度不均匀、聚类间距差相差很大时,聚类质量较差,此时DBSCAN一般不适合;
2. 样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的 KD 树或者球树进行规模限制来进行改进;
3. 调参比较复杂(相对于传统的K-Means之类的聚类算法),主要需要对距离阈值 Eps,邻域样本数阈值 MinPts 进行联合调参,不同的参数组合对最后的聚类效果有较大影响;
4. 对于整个数据集只采用了一组参数。如果数据集中存在不同密度的簇或者嵌套簇,则该算法不能处理;为了解决这个问题,有人提出了 OPTICS 算法。
5. DBSCAN 算法可过滤噪声点,这同时也是其缺点,这造成了其不适用于某些领域,如对网络安全领域中恶意攻击的判断。