#前言
本篇博客继上一篇聚类算法的介绍,给大家再介绍一种功能更为强大的聚类算法--DBSCAN算法,这也是目前市面上较为流行的一种聚类算法,相较于K-MEANS算法,个人认为它功能更加全面,使用范围和使用效果更好!接下来我就对此算法进行一个简单的介绍。
#DBSCAN算法相关的基本概念介绍
1.核心对象:若某个点的密度达到算法设定的阈值则其为核心点。
-领域的距离阈值:设定的半径r。
以上这两个概念需要综合起来来理解,我们的算法会依据我们输入的两个参数(最小密度:也就是在特定范围内目标的个数,特定范围的半径)遍历每一个点,将符合两个参数的点设置为核心对象
2.直接密度可达:若某点p在点q的r邻域内,且q是核心点则p-q直接密度可达。
密度可达:若有一个点的序列q0、q1、.qk,对任意qi-qi-1是直接密度可达的,则称从q0到qk密度可达,这实际上是直接密度可达的“传播”。
直接密度可达其实很好理解,就是如果非核心对象与其所属核心对象之间的关系,通俗来讲就是一个点在另一个点的领域内,那么该点与该范围的核心对象之间就是直接密度可达。
密度可达有点类似于我们以前所学过的传递性,一个点可以同时为多个特定范围核心对象的直接密度可达点,而这些核心对象之间就是密度可达。
3.密度相连:若从某核心点P出发,点q和点k都是密度可达的,则称点q和点k是密度相连的。
4.边界点:我们上面说过这种密度可达的传递行,当我们遍历到某个点,将其作为核心对象时发现已经不符合特定领域内的最小的目标阈值了,那么此时我们说这个点就是边界点。
5.噪声点(或者说是离群点):即没有被任何一个领域所包括的点,这也就是DBSCAN算法可以用于噪声监测的原因。
#DBSCAN算法模型的原理流程介绍:
在上图中,算法首先确定了一个核心对象即为A,那么与其直接密度可达的点就为A',A''和A''',再将以上三个点作为核心对象进行密度传递,直至BC两点后发现,BC无法满足最小密度阈值,也就成为了边界点,而N点不属于任何一个特定领域,那么他就是我们所谓的离群点或者噪声点。
#DBCSCAN算法模型的工作流程
首次我们需要输入参数,包括我们的待分类数据集,密度最小阈值以及半径r,其次具体的流程见下图:
个人认为以上的工作流程图已经解释的非常清楚了,结合模型的原理流程应该是比较好理解,如果有什么无法理解可以后台私信博主,我看到后会第一时间回复!
#参数的选择
与K-MEANS算法一样,DBSCAN算法的核心难点在于参数的选择,这里DBSCAN算法与K-MEANS算法最显著的不同点在于前者不需要制定簇的个数,这里簇的个数交给算法本身来完成。
第一点我们来讨论一下半径r的设定。这里需要引入一个新的概念就是K距离,我们将某个对象确定为核心对象后,计算每一个点到该点的距离,然后找到突变点,以突变点上一个点的距离作为我们半径r的设定距离。什么是突变点?假设现在的距离分别为d1=0.1,d2=0.12,d3=0.15,d4=0.3
这里我们发现,从d3到d4距离发生了一个巨大的改变(相较于前三个点),那么我们就将d4设置为突变点,r的选择就是d3的距离。
第二点我们在设置最小密度阈值时,一般先设置的较小,在依据情况慢慢调大,多次进行尝试。
#DBSCAN算法的优劣点
优点:
·不需要指定簇个数(数据将聚类成多少簇取决于算法本身)
·可以发现任意形状的簇(这对于处理较为复杂的聚类图形来说非常强大且高效)
·擅长找到离群点(检测任务)
·两个参数就够了(较少的参数选择可以很大程度上减少工作量)
劣势:
·高维数据有些困难(可以做降维)
·参数难以选择(参数对结果的影响非常大)
·Sklearn中效率很慢(数据削減策略)
本篇博客到这里就结束啦!希望本篇博客可以对您有所帮助,咱们下期再见👋拜拜~