0/dbscan简介
DBSCAN:Density-Based Spatial Clustering of Applications with Noise
具有噪声的基于密度的聚类方法,是一种很典型的密度聚类算法。
具有噪声的意思是:可以识别出噪声点(异常值)
为什么说是具有噪声的密度聚类算法?
因为该算法可以识别出噪声数据(异常点,既不是核心数据点,也不在核心数据点的临域内)
既不是核心数据点,也不是边界数据点的数据点,就是噪声数据点。
是一种具有噪声的基于密度的空间聚类算法。
即然是空间,那就可以是多维的
不需要像kmeans聚类算法那样需要提前指定需要聚成多少类。
k-means算法是通过手肘法来确定k的值的。
该算法将具有`足够密度`的空间划分为簇,并在具有噪声数据的空间数据集中发现任意形状的簇,它将簇定义为密度相连的点的最大集合。
该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其他空间对象)的数目不小于某一给定阈值。
DBSCAN算法的目的在于过滤低密度区域,发现稠密度样本点。低密度区域里的点可以理解成是离群点。
DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。
同一类别的样本,他们之间是紧密相连的,及在该类别任意样本周围不远处一定有同类别的样本存在。
通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。
通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。
DBSCAN算法将簇看做高密度区域以从低密度区域中区分开。
由于这个算法的一般性,DBSCAN建立的簇可以是任何形状的。
相对的,K-means则假设簇是凸的。
核样本(核心数据点)的概念是DBSCAN的重要成分
一个簇是由互相靠近的核样本的集合以及靠近核样本的非核样本组成的集合组成的。
基本概念
半径:eps
Eps半径内指定的数目(阈值):minpts,point,数据点
邻域:一个数据点的半径范围内,都是它的邻域。
数据点分为三:
1. 核心点:在半径Eps内含有>=MinPts数目的点
2. 边界点:在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内
本身不是核心点,但是在核心点的半径内。
3. 噪音点:既不是核心点也不是边界点的点
这个算法有两个参数:
eps 和 min_pts
这两个参数表示数据的稠密性。
当eps减小或者min_pts增加,意味着一个簇分类有更大的密度要求。
从下图中可以看到,不同的颜色表示不同的簇。
大圈圈: 表示算法定义的核心点
小圈圈: 表示仍是簇的组成部分的边界点,不是核心点,但是在核心点的半径内。
黑色点表示噪声数据点。
1/主要用途
聚类,发现数据之间的关联。
2/优缺点
优点
能够发现任意形状(凸数据集,凹数据集)的簇,并有效识别异常点
与K-means算法相比,dbsan不需要事先指定要形成的簇的数量k.
只需要调整半径和min-pts这2个参数,就可以生成不同的簇(群体,社区)。
生成几个,就是几个
DBSCAN对于数据库中样本的顺序不敏感,即Pattern的输入顺序对结果的影响不大,但对于处于簇类之间边界样本,可能会根据哪个簇类优先被探测到而其归属有所摆动;DBSCAN可被设计与数据库一同使用,可以加速区域查询。
聚类速度快
能够有效处理噪声点和发现任意形状的空间聚类
既可以处理凸数据集,也可以处理非凸数据集。
缺点
1)eps和minpts这2个参数需要人为提前指定。
2)当数据量增大时,要求较大的内存支持I/O消耗也很大,因此不能很好的反映高维数据
3)参数Eps和MinPts在聚类过程中是不变的,使得该算法难以适应密度不均匀的数据集,聚类质量较差。
3/DBSCAN和传统聚类算法对比
DBSCAN算法的目的在于过滤低密度区域,发现稠密度样本点。
跟传统的层次聚类和划分聚类的凸形聚类簇不同,该算法可以发现任意形状的聚类簇,
与传统的算法相比它有如下优点:
(1)与K-MEANS比较起来,不需要输入要划分的聚类个数;
(2)聚类簇的形状没有偏倚;
(3)可以在需要时输入过滤噪声的参数;
4/算法中的一些基本定义
<1>什么是核心数据点:
如果一个数据点,它的邻域内(也就是半径eps内)的数据点的个数>=minpts,
那么这个数据点就是核心数据点。
<2>什么是邻域:
一个数据点的半径范围内,就是它的邻域。可以理解为数据点的半径范围内,就是它的邻域
DBSCAN是基于一组邻域来描述样本集的紧密程度的,参数(𝜖,MinPts)用来描述邻域的样本分布紧密程度。
其中,𝜖描述了某一样本的邻域距离阈值,MinPts描述了某一样本的距离为𝜖的邻域内样本个数的阈值。
<3>什么是密度直达
如果数据点a在数据点b的的邻域内,且数据点b是核心数据点,则a和b是密度直达的。
<4>什么是密度可达?
对于𝑥𝑖和𝑥𝑗,如果存在样本样本序列𝑝1,𝑝2,...,𝑝𝑇,满足𝑝1=𝑥𝑖,𝑝𝑇=𝑥𝑗, 且𝑝𝑡+1由𝑝𝑡密度直达,
则称𝑥𝑗由𝑥𝑖密度可达。
也就是说,密度可达满足传递性。
此时序列中的传递样本𝑝1,𝑝2,...,𝑝𝑇−1均为核心对象,因为只有核心对象才能使其他样本密度直达
注意密度可达也不满足对称性,这个可以由密度直达的不对称性得出。
<5>什么是密度相连?
对于𝑥𝑖和𝑥𝑗,如果存在核心对象样本𝑥𝑘,使𝑥𝑖和𝑥𝑗均由𝑥𝑘密度可达,则称𝑥𝑖和𝑥𝑗密度相连。
注意密度相连关系是满足对称性的。
从下图可以很容易看出理解上述定义,设MinPts=5,红色的点都是核心对象,因为其半径内至少有5个样本。
黑色的样本是非核心对象。
所有核心对象密度直达的样本在以红色核心对象为中心的超球体内,如果不在超球体内,则不能密度直达。
图中用绿色箭头连起来的核心对象组成了密度可达的样本序列。
在这些密度可达的样本序列的𝜖-邻域内所有的样本相互都是密度相连的。
5/DBSCAN算法的聚类过程
DBSCAN算法基于一个事实:一个聚类可以由其中的任何核心对象唯一确定。
等价可以表述为:任一满足核心对象条件的数据对象p,数据库D中所有从p密度可达的数据对象o所组成的集合构成了一个完整的聚类C,且p属于C。
算法的具体聚类过程如下:
扫描整个数据集,找到任意一个核心点,对该核心点进行扩充。
扩充的方法是寻找从该核心点出发的所有密度相连的数据点(注意是密度相连)。
遍历该核心点的邻域内的所有核心点(因为边界点是无法扩充的),寻找与这些数据点密度相连的点,直到没有可以扩充的数据点为止。
最后聚类成的簇的边界节点都是非核心数据点。之后就是重新扫描数据集(不包括之前寻找到的簇中的任何数据点),寻找没有被聚类的核心点,再重复上面的步骤,对该核心点进行扩充直到数据集中没有新的核心点为止。
数据集中没有包含在任何簇中的数据点就构成异常点。
6/算法伪代码
算法: DBSCAN
输入: E——半径
MinPts——给定点在E邻域内成为核心对象的最小邻域点数。
D——集合。
输出: 目标类簇集合
方法: Repeat
1) 判断输入点是否为核心对象
2) 找出核心对象的E邻域中的所有直接密度可达点。
Until 所有输入点都判断完毕
Repeat
针对所有核心对象的E邻域内所有直接密度可达点找到最大密度相连对象集合,中间涉及到一些密度可达对象的合并。
Until 所有核心对象的E领域都遍历完毕**
7/DBSCAN密度聚类思想
DBSCAN的聚类定义很简单: 由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇。
这个DBSCAN的簇里面可以有一个或者多个核心对象。如果只有一个核心对象,则簇里其他的非核心对象样本都在这个核心对象的𝜖-邻域里;如果有多个核心对象,则簇里的任意一个核心对象的𝜖-邻域中一定有一个其他的核心对象,否则这两个核心对象无法密度可达。这些核心对象的𝜖-邻域里所有的样本的集合组成的一个DBSCAN聚类簇。
那么怎么才能找到这样的簇样本集合呢?DBSCAN使用的方法很简单,它任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。接着继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。一直运行到所有核心对象都有类别为止。
基本上这就是DBSCAN算法的主要内容了,是不是很简单?但是我们还是有三个问题没有考虑。
第一个是一些异常样本点或者说少量游离于簇外的样本点,这些点不在任何一个核心对象在周围,在DBSCAN中,我们一般将这些样本点标记为噪音点。
第二个是距离的度量问题,即如何计算某样本和核心对象样本的距离。在DBSCAN中,一般采用最近邻思想,采用某一种距离度量来衡量样本距离,比如欧式距离。这和KNN分类算法的最近邻思想完全相同。对应少量的样本,寻找最近邻可以直接去计算所有样本的距离,如果样本量较大,则一般采用KD树或者球树来快速的搜索最近邻。如果大家对于最近邻的思想,距离度量,KD树和球树不熟悉,建议参考之前写的另一篇文章K近邻法(KNN)原理小结。
第三种问题比较特殊,某些样本可能到两个核心对象的距离都小于𝜖,但是这两个核心对象由于不是密度直达,又不属于同一个聚类簇,那么如果界定这个样本的类别呢?一般来说,此时DBSCAN采用先来后到,先进行聚类的类别簇会标记这个样本为它的类别。也就是说DBSCAN的算法不是完全稳定的算法。
8/dbscan和k-means的适用场景的不同
一般来说,如果数据集是稠密的,并且数据集不是凸的,那么用DBSCAN会比K-Means聚类效果好很多。
如果数据集不是稠密的,则不推荐用DBSCAN来聚类。
DBSCAN和K-means算法各有其优缺点,适用于不同的数据类型和聚类需求。
DBSCAN的优点包括:
1. 可以发现任意形状的簇类,包括非球形和密度不均匀的簇。
1. 能够处理噪声和离群点,将其视为异常点或非核心点。
1. 不需要预先指定簇的数量,可以自动确定簇的数量。
1. 对数据集中的异常点不敏感,聚类结果相对稳定。
然而,DBSCAN也存在一些缺点:
1. 对于高维数据,性能可能较差,因为对密度定义的要求比较严格。
1. 调参相对于传统的K-means之类的聚类算法稍复杂,需要对距离阈值ε和邻域样本数阈值MinPts进行联合调参。
1. 如果样本集的密度不均匀,聚类间距离相差很大时,聚类质量可能较差。
1. 对于大规模数据集,聚类收敛时间较长,可能需要采取优化措施。
K-means的优点包括:
1. 原理简单,实现容易,收敛速度快。
1. 聚类效果较优,可以发现球状类簇。
1. 算法的可解释度比较强。
1. 主要需要调参的参数仅仅是簇数k,相对简单。
K-means的缺点包括:
1. 需要预先指定簇的数量,不适合无法确定簇数量的场景。
1. 对于非凸的数据集比较难收敛,容易陷入局部最优。
1. 对于各隐含类别的数据不平衡或方差不齐的情况,聚类效果不佳。
1. 对噪音和异常点比较敏感,可能会将它们归入某个簇中。
1. 对于高维数据,性能可能较差,因为高维空间中的数据点距离更近,难以形成明显的簇边界。
9/DBSCAN小结
和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数k,
当然它最大的优势是可以发现任意形状的簇,而不是像K-Means,一般仅仅适用于凸样本集聚类。
同时它在聚类的同时还可以找出异常点,这点和BIRCH算法类似。
DBSCAN的主要优点有:
1)可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。
2)可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
3)聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始聚类中心对聚类结果有很大影响。
DBSCAN的主要缺点有:
1)如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。
2)如果样本集较大时,聚类收敛时间较长,可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
3)调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对eps和minpts这2哥参数的联合调参,
不同的参数组合对最后的聚类效果有较大影响。