关于聚类算法的前面两篇文章,已经介绍过了常用的原型聚类算法k-measn算法和层次聚类中的凝聚算法,这篇文章介绍一些密度聚类算法DBSCAN。k-means算法需要事先指定簇的个数,而凝聚不需要指定簇的个数,这两个算法会将所有的样本的划分到簇中,无法区分出噪声,k-means算法的簇空间是球状的,它们都无法很好的区分出高密度的区域。这篇文章主要介绍聚类算法中的DBSCAN算法,它划分出来的簇空间可以是任意形状的。通过这篇文章你能够了解到:
1、什么是密度聚类
2、DBSCAN算法
3、使用DBSCAN来划分高密度区域
一、密度聚类密度聚类也称"基于密度的聚类"(density-based clustering),算法是假设聚类结果能够通过样本分布的紧密程度来进行簇的划分的。密度聚类算法是从样本密度的角度来考虑样本之间的可连接性,并基于可连接性不断扩展聚类簇来获得最终的聚类结果。
二、DBSCAN算法DBSCAN是一种常用的密度聚类算法,密度被定义为指定半径ε范围内样本点的数量。在DBSCAN中,每个样本点都被赋予了一个标签:
核心点(core point):如果在一个点周边的指定半径ε内,其它样本点的数量不小于指定数量(MinPts),则称这个点为核心点。
边界点(border point):在一个指定半径ε内,如果一个点的邻居点小于MinPts,但是却包含一个核心点,则称这个点为边界点。
噪声点(noise point):除核心点和边界点以外的点,都被称为噪声点。
DBSCAN算法主要包括两个步骤:
1、基于每个核心点或者一组相连的核心点(如果核心点的距离很近,则将其看作是相连的)形成一个单独的簇。
2、将每个边界点划分到其对应核心点的簇中。
与k-means算法相比,DBSCAN的簇空间不一定是球状,这是DBSCAN算法的优点之一。而且,DBSCAN聚类还可以识别并移除噪声点,所以它不一定会将所有的样本点都划分到某一簇中。下面我们通过一个半月形的数据集来对比k-means聚类以及凝聚聚类和DBSCAN的聚类结果
三、使用DBSCAN来划分高密度的数据1、获取数据集
使用sklearn的dataset获取一个高密度的半月形数据集,包含2类样本一共200个样本点,并加入一些噪声。
2、使用k-means算法进行聚类
通过上图可以发现,k-means算法并不能很好的将半月形数据分开。
3、使用凝聚聚类进行
通过结果发现,凝聚聚类也不能很好的将两个簇进行分割。
4、使用DBSCAN算法进行聚类
在使用DBSCAN算法的时候,需要设置好半径和MinPts两个参数
通过DBSCAN的结果可以发现,它能够将这种高密度的数据集很好的进行划分,相对于k-means算法和凝聚聚类而言,它还能够标记出噪声点,噪声所对应的类标是-1。
总结:在使用聚类算法对数据进行聚类分析的时候,随着样本特征数量的增加,维度灾难也会随之递增。特别是在使用欧式距离作为度量标准的时候。在使用DBSCAN算法的时候,需要对两个超参MinPts和半径进行优化,如果数据集中的密度差异相对较大,找到合适的半径和MinPts相对较难。DBSCAN除了用于聚类分析之外,还可以通过去除噪声。在实际应用中,对于一个给定的数据集,很难确定应该选择哪种算法,特别是数据的维度较高或者难以进行可视化分析的时候。一个好的聚类算法,除了依赖算法和其超参之外,对于选择合适的度量标准也很重要。