详解DBSCAN聚类

使用DBSCAN标识为员工分组

详解DBSCAN聚类

文章插图
 
照片由Ishan @seefromthesky 在 Unsplash拍摄
基于密度的噪声应用空间聚类(DBSCAN)是一种无监督的ML聚类算法 。无监督的意思是它不使用预先标记的目标来聚类数据点 。聚类是指试图将相似的数据点分组到人工确定的组或簇中 。它可以替代KMeans和层次聚类等流行的聚类算法 。
在我们的示例中,我们将检查一个包含15,000名员工的人力资源数据集 。数据集包含员工的工作特征,如工作满意度、绩效评分、工作量、任职年限、事故、升职次数 。
KMeans vs DBSCANKMeans尤其容易受到异常值的影响 。当算法遍历质心时,在达到稳定性和收敛性之前,离群值对质心的移动方式有显著的影响 。此外,KMeans在集群大小和密度不同的情况下还存在数据精确聚类的问题 。K-Means只能应用球形簇,如果数据不是球形的,它的准确性就会受到影响 。最后,KMeans要求我们首先选择希望找到的集群的数量 。下面是KMeans和DBSCAN如何聚类同一个数据集的示例 。
详解DBSCAN聚类

文章插图
 

详解DBSCAN聚类

文章插图
 
另一方面,DBSCAN不要求我们指定集群的数量,避免了异常值,并且在任意形状和大小的集群中工作得非常好 。它没有质心,聚类簇是通过将相邻的点连接在一起的过程形成的 。
DBSCAN是如何实现的呢?首先,让我们定义Epsilon和最小点、应用DBSCAN算法时需要的两个参数以及一些额外的参数 。
1. Epsilon (?):社区的最大半径 。如果数据点的相互距离小于或等于指定的epsilon,那么它们将是同一类的 。换句话说,它是DBSCAN用来确定两个点是否相似和属于同一类的距离 。更大的epsilon将产生更大的簇(包含更多的数据点),更小的epsilon将构建更小的簇 。一般来说,我们喜欢较小的值是因为我们只需要很小一部分的数据点在彼此之间的距离内 。但是如果太小,您会将集群分割的越来越小 。
1. 最小点(minPts):在一个邻域的半径内minPts数的邻域被认为是一个簇 。请记住,初始点包含在minPts中 。一个较低的minPts帮助算法建立更多的集群与更多的噪声或离群值 。较高的minPts将确保更健壮的集群,但如果集群太大,较小的集群将被合并到较大的集群中 。
如果"最小点"= 4,则在彼此距离内的任意4个或4个以上的点都被认为是一个簇 。
其他参数核心点:核心数据点在其近邻距离内至少有的最小的数据点个数 。
我一直认为DBSCAN需要一个名为"core_min"的第三个参数,它将确定一个邻域点簇被认为是聚类簇之前的最小核心点数量 。
边界点:边界数据点位于郊区,就像它们属于近邻点一样 。(比如w/在epsilon距离内的核心点),但需要小于minPts 。
离群点:这些点不是近邻点,也不是边界点 。这些点位于低密度地区 。
详解DBSCAN聚类

文章插图
 
首先,选择一个在其半径内至少有minPts的随机点 。然后对核心点的邻域内的每个点进行评估,以确定它是否在epsilon距离内有minPts (minPts包括点本身) 。如果该点满足minPts标准,它将成为另一个核心点,集群将扩展 。如果一个点不满足minPts标准,它成为边界点 。随着过程的继续,算法开始发展成为核心点"a"是"b"的邻居,而"b"又是"c"的邻居,以此类推 。当集群被边界点包围时,这个聚类簇已经搜索完全,因为在距离内没有更多的点 。选择一个新的随机点,并重复该过程以识别下一个簇 。
详解DBSCAN聚类

文章插图
 
如何确定最优的Epsilon值估计最优值的一种方法是使用k近邻算法 。如果您还记得的话,这是一种有监督的ML聚类算法,它根据新数据点与其他"已知"数据点的距离来聚类 。我们在带标记的训练数据上训练一个KNN模型,以确定哪些数据点属于哪个聚类 。当我们将模型应用到新数据时,算法根据与训练过的聚类的距离来确定新数据点属于哪一个聚类 。我们必须确定"k"参数,它指定在将新数据点分配给一个集群之前,模型将考虑多少个最邻近点 。
为了确定最佳的epsilon值,我们计算每个点与其最近/最近邻居之间的平均距离 。然后我们绘制一个k距离,并选择在图的"肘部"处的epsilon值 。在y轴上,我们绘制平均距离,在x轴上绘制数据集中的所有数据点 。


推荐阅读