DBSCAN(Density-based Spatial Clustering of Applications with Noise)是一种无监督学习算法,用于数据聚类。本文将从概念细节入手,逐步展示如何使用Sci-kit Learn库在Python中实现DBSCAN算法。
密度这个概念源自物理学,指的是单位体积内物质的量。可以将这个概念扩展到更高维度或更低维度。例如,如果有两个区域,一个区域内的数据点比另一个区域多,那么第一个区域的密度就大于第二个区域。DBSCAN算法正是利用这种密度概念来对数据集进行聚类。为了更清楚地理解DBSCAN算法,需要了解一些重要的参数。
DBSCAN算法中有两个重要的参数:epsilon(ε)和min_samples(z)。
Epsilon是衡量邻域大小的一个参数。如果以某点为中心,以epsilon为半径画一个圆,那么这个圆内部的所有点就构成了该点的邻域。
假设这是当前考虑的点,以该点为中心画一个圆,圆的半径就是epsilon。这样,就可以定义这个圆为该点的邻域。
在本文中,将min_samples表示为z。这个参数是一个阈值,表示希望在某个点的邻域中看到的最小点数。如果设置z=3,那么如果一个点的邻域中有4个点,这也满足阈值z=3,因为这意味着该邻域中的样本数至少为3。
基于这两个参数,即epsilon和min_samples,首先将数据集中的每个点分类为三类:核心点、边界点和噪声点。
如果一个点是核心点,那么它必须满足一个条件:其邻域内的点数必须大于或等于阈值min_samples或z。如果设置z=3,那么这个点就满足这个条件,因此称这个点为核心点。
如果一个点是边界点,那么它必须满足以下两个条件:其邻域内的点数必须少于z,并且该点必须在某个核心点的邻域内。
噪声点的定义非常简单。如果一个点既不是核心点也不是边界点,那么它就被称为噪声点。