1. 引言
聚类算法作为分类任务中的无监督方法,在很多场景中都会用到,比如用户聚类、文档主题分类等等。常见的聚类算法大致可以分为两种,一种是基于分区的算法,如k-means等,这种方法虽然易于理解,但是有以下三个缺点:
- 需要人为事先确定聚类的个数,当数据集比较大时,这是很难事先给出一个比较合适的值的。
- 只适用于具有凸形状的簇,无法适用于具有任意形状的簇。
- 对内存的占用资源比较大,很难推广到大规模数据集。
另一种是基于层次划分的算法,如层次聚类法等,这种方法虽然不用事先确定聚类的个数,但是也存在以下缺点:
- 需要确定停止分裂的条件
- 计算速度慢。
因此,本文介绍另一个聚类算法——DBSCAN,该方法是基于密度的聚类方法,能够有效解决上面提到的各种问题。
2. DBSCAN聚类算法介绍
2.1 DBSCAN聚类相关概念
DBSCAN是一种基于密度的聚类算法,其基本假设是一个集群的密度要显著高于噪声点的密度,因此,该方法的基本思想是对于集群中的每一个点,在给定的半径范围内,其相邻点的数量必须超过预先设定的某一个阈值。
在介绍DBSCAN算法之前,先介绍几个基本的概念:
- Eps领域(Eps-neighborhood) :对于一个点,记其Eps领域为 N E p s ( p ) \mathrm{N}_{\mathrm{Eps}}(\mathrm{p}) NEps(p),则其定义如下:
N E p s ( p ) = { q ∈ D ∣ dist ( p , q ) ≤ E p s } \mathrm{N}_{\mathrm{Eps}}(\mathrm{p})=\{\mathrm{q} \in D | \operatorname{dist}(\mathrm{p}, \mathrm{q}) \leq \mathrm{Eps}\} NEps(p)={ q∈D∣dist(p,q)≤Eps}
其中, D D D表示整个数据集集合, dist ( p , q ) \operatorname{dist}(p, q) dist(p,q)表示点 p p p和 q q q的距离。 - 直接密度可达(directly density-reachable):称一个点 p p p直接密度可达点 q q q,如果满足以下条件:
p ∈ N E p s ( q ) ∣ N E p s ( q ) ∣ ≥ M i n P t s \mathrm{p} \in \mathrm{N}_{\mathrm{Eps}}(\mathrm{q}) \\ \left|\mathrm{N}_{\mathrm{Eps}}(\mathrm{q})\right| \geq \mathrm{MinPts} p∈NEps(q)∣NEps(q)∣≥MinPts
其中,MinPts表示一个中心点的Eps领域必须包含的最小数量,需要事先确定。当点 p p p和 q q q都是一个集群的中心点时,则此时直接密度可达对两个点来说都是对称的,当时当 p p p是边界点时,则此时直接密度可达不是对称的,如下图所示。
- 密度可达(density-reachable):如果存在一串点 p 1 , … , p n , p 1 = q , p n = p \mathrm{p}_{1}, \dots, \mathrm{p}_{\mathrm{n}}, \mathrm{p}_{1}=\mathrm{q}, \mathrm{p}_{\mathrm{n}}=\mathrm{p} p1,…,pn,p1=q,pn=p,有 p i + 1 \mathrm{p}_{\mathrm{i+1}} pi+1从 p i \mathrm{p}_{\mathrm{i}} pi直接密度可达,那么就称 p p p从 q q q密度可达。
- 密度相连(density-connected):如果存在一个点 o o