一、概述
- 一般基于距离的聚类算法(如K-Means)的聚类结果是球状的簇,当数据集中的聚类结果是非球状结构时,基于距离的聚类算法的聚类效果并不好。
- 与基于距离的聚类算法不同的是,基于密度的聚类算法可以发现任意形状的聚类。
- 在基于密度的聚类算法中,通过在数据集中寻找被低密度区域分离的高密度区域,将分离出的高密度区域作为一个独立的类别。
- DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇,并在具有噪声的数据中发现任意形状的簇,它将簇定义为密度相连的点的最大集合。
二、DBSCAN算法原理
-
在DBSCAN算法中将数据点分为三类:
- 核心点:若样本的邻域内包含的样本数大于等于,即, 则称样本点为核心点,其中和是预先设置好的值。
- 边界点:若样本的邻域内包含的样本数目小于,但是它在其他核心点的邻域内,则称样本点为边界点
-
噪音点:既不是核心点也不是边界点的点
-
相关概念:
- 密度直达:若样本是核心点并且落的邻域内,则称样本点是由样本点密度直达的
- 密度可达:如果存在一系列的样本点(其中),并且样本点 可由样本点密度直可达,我们称样本点是样本点密度可达的
- 密度相连:如果存在一个样本点,使得和均由样本点密度可达。称样本点和是密度相连的。
-
如下图所示,
- 由上图可看出$m,p,o.r $都是核心对象,因为他们的内都只是包含3个对象。
- 样本点q是由样本点m密度直达的
- 样本点q是由样本点p密度达的
-
基于密度的聚类算法通过寻找被低密度区域分离的高密度区域,并将高密度区域作为一个聚类的“簇”。
-
在DBSCAN算法中,聚类“簇”定义为:由密度可达关系导出的最大的密度连接样本的集合。
-
在DBSCAN算法中,由核心对象出发,找到与该核心对象密度可达的所有样本形成“簇”。
-
DBSCAN算法的流程为:
- 输入:样本集,邻域参数,样本距离度量方式
- 输出: 簇划分.
-
第一步:初始化
- 初始化核心点集合,
- 初始化聚类簇数,
- 初始化未访问样本集合,
- 簇划分
- 第二步: 计算核心点集合
-
:
- 通过距离度量方式,找到样本的邻域子样本集
-
- 将样本加入核心对象样本集合:
-
:
- 第三步:聚类
-
:
- 在核心点集合Ω中,随机选择一个核心点,
- 初始化当前簇核心对象队列,
- 初始化类别序号,
- 初始化当前簇样本集合,
- 更新未访问样本集合
-
:
- 取出的的首个样本
- 通过邻域距离阈值计算的ϵ-邻域
-
- 令
- 将加入队列
- 将
-
-
:
- 第四步:输出
-
DBSCAN算法的一个动态图:
三、总结
-
和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数k,当然它最大的优势是可以发现任意形状的聚类簇,而不是像K-Means,一般仅仅使用于凸的样本集聚类。同时它在聚类的同时还可以找出异常点,这点和BIRCH算法类似。
-
一般来说,如果数据集是稠密的,并且数据集不是凸的,那么用DBSCAN会比K-Means聚类效果好很多。如果数据集不是稠密的,则不推荐用DBSCAN来聚类。
-
主要优点有:
- 可以对任意形状的稠密数据集进行聚类
- 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
- 聚类结果没有偏倚,算法初始值对聚类结果影响不大。
-
主要缺点有:
- 如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。
- 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
- 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。