1.引言
今天,我们将讨论另一种聚类算法 DBSCAN
(基于密度的带噪声应用空间聚类)。为了更好地理解 DBSCAN
,请先阅读之前介绍的 K-Means
和 分层聚类
这两篇文章。
顾名思义,
DBSCAN
是通过点的密度来识别聚类集群。聚类通常位于高密度区域,而异常值往往位于低密度区域。使用该算法的 3个主要优势(根据该算法的先驱者的说法)是:它只需要最少的领域知识,可以发现任意形状的聚类,并且对于大型数据库来说非常高效。
闲话少说,我们直接开始吧!
2. 确定核心样本点
既然已经介绍完了相关定义,我们就开始进入有趣的部分–实际了解它是如何工作的。假设我们的原始数据是这样的:
首先要做的是计算与每个点接近的点的数量。我们可以通过在一个点周围画一个半径(eps
)为一定的圆来确定这个点的接近程度,在这个圆内的任何其他点都可以说是接近第一个点。例如,从这个粉红色的点开始,围绕它画一个圆。
我们看到,这个点与其他 7 个点完全或部分重叠。因此,我们可以说,粉红点与 7 个点很接近。
圆的半径称为
eps
,是DSBCAN
算法中我们需要定义的第一个参数。我们需要适当地定义eps
,因为如果我们选择的值太小,很大一部分数据将无法聚类。另一方面,如果我们选择的值过大,聚类就会合并,很多数据点就会在同一个聚类中。一般来说,eps
值越小越好。
现在来看看这个蓝色的点。我们看到它与 3 个点很接近,因为其半径为 eps
的圆与其他 3 个点重叠。
同样,对于所有剩余的点,我们要计算接近的点数。这样,我们就需要确定哪些点是核心点,哪些点是非核心点。
这就是我们算法的第二个参数
minPoints
的作用所在。我们使用minPoints
来确定一个点是否是核心点。假设我们将minPoints
设为 4,那么如果至少有 4 个点靠近该点,我们就可以说该点是核心点。如果某点附近的点少于 4 个,则该点被视为非核心点。
一般来说,
minPoints
≥ 数据集的维数 + 1。对于有噪声的数据集来说,较大的值通常更好。minPoints
的最小值必须是3,但数据集越大,minPoints
值就必须越大。 在我们的示例中,让我们将minPoints
设置为4。
这样,我们就可以说粉色点是一个核心点,因为至少有 4 个点靠近它,而蓝色点是一个非核心点,因为只有 3 个点靠近它。
最终,通过重复上述过程,我们可以确定以下突出要点为核心样本点,剩下的是非核心样本点。
3.划分群组
接着,我们随机选择一个核心样本点,并将其分配到第一个群组集群。在这里,我们随机选取一个点,并将其分配到蓝色群组。
接下来是靠近蓝色的核心点的其他样本(即它们与半径为 Eps 的圆重叠)
都将被归为蓝色集群,如下:
然后,将靠近不断扩大的蓝色集群的核心点添加到蓝色集群中。下图显示,有 2 个核心点和 1 个非核心点靠近蓝色星团,但我们只将 2 个核心点添加进去。
最终,所有靠近不断扩大的蓝色集群的核心点都会被添加到集群中,数据就会变成这样:
接着,我们将所有靠近蓝色集群的非核心点添加到蓝色集群中。例如,下图中这 2 个非核心点靠近蓝色集群,因此将它们添加到蓝色集群中:
不过,由于它们不是核心点,我们不会使用它们来进一步扩展蓝色集群。也就是说,靠近非核心点 1 的另一个非核心点不会被添加到蓝色集群中的。
与核心点不同,非核心点只能加入集群,而不能用于进一步扩展集群。
添加所有非核心点后,我们就完成了蓝色集群的创建,它看起来是这样的:
现在,由于剩余的核心点都不靠近第一个集群,我们开始组建一个新的集群。首先,我们随机选取一个核心点(不在一个群组中),将其分配到第二个黄色群组中。
然后,我们添加靠近黄色集群的所有核心点,并利用它们进一步扩展黄色群组。
然后将靠近黄色聚类的非核心点添加到黄色聚类集群中。这样,我们的数据就有了 2 个群组,看起来就像这样:
我们不断重复创建集群的过程,直到没有核心点为止。在我们的例子中,由于所有的核心点都被分配到了相应的群组聚类中,因此我们已经完成了创建新聚类的工作。最后,任何剩余的非核心点都被称为离群点,它们既不靠近核心点,也不属于任何聚类集群。
就这样,我们完成了DBSCAN
的2个群组集群聚类,并发现了7个异常离群值。
4. DBSCAN算法优势
K-Means
和分层聚类适用于结构紧凑、分离度高的聚类,但也会受到数据中噪声和异常值的严重影响。另一方面,DBSCAN
可以捕捉形状复杂的聚类,并能很好地识别异常值。
此外DBSCAN
的另一个优点是,与 K-Means
不同,我们不需要指定簇的数量(k),算法会自动为我们找到簇。下图举例说明了 DBSCAN
与 K-Means
的不同之处,以及为什么 DBSCAN
在使用得当的情况下可以发挥强大的作用。
5.总结
今天就到这里了,本文重点介绍了机器学习中利用DBSCAN
算法进行聚类的讲解,并给出了详细的图例说明。
您学废了吗?