DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。
DBSCAN算法最重要的两个参数是ε \varepsilon ε 和M i n P t s MinPts M i n P t s ,其中ε \varepsilon ε 描述了某一样本的邻域距离阈值,M i n P t s MinPts M i n P t s 描述了某一样本的距离为ε \varepsilon ε 的邻域中样本个数的阈值。
DBSCAN算法中的概念
ε \varepsilon ε : 包含样本集D D D 中与某个样本x x x 的距离不大于ε \varepsilon ε 的子样本集。核心对象: 对于任意一个样本x x x ,若其ε \varepsilon ε 邻域中至少包含M i n P t s MinPts M i n P t s 个样本,则该样本x x x 是核心对象。密度直达: 若x i x_i x i 位于x j x_j x j 的ε \varepsilon ε 邻域中,且x j x_j x j 是核心对象,则称x i x_i x i 由x j x_j x j 密度直达,反之不一定成立。密度可达: 对于x i x_i x i 和x j x_j x j ,若存在样本序列{ P 1 , P 2 , . . . , P t } \begin{Bmatrix}P_1,P_2,...,P_t\end{Bmatrix} { P 1 , P 2 , . . . , P t } ,满足P 1 = x i , P t = x j P_1=x_i,P_t=x_j P 1 = x i , P t = x j 且P t + 1 P_{t+1} P t + 1 由P t P_{t} P t 密度直达,则称x i x_i x i 由x j x_j x j 密度可达。密度可达满足传递性,此时序列P 1 , P 2 , . . . , P t − 1 P_1,P_2,...,P_{t-1} P 1 , P 2 , . . . , P t − 1 均为核心对象,因为只有核心对象才能使其他样本密度直达。密度相连: 对于x i x_i x i 和x j x_j x j ,若存在核心对象x k x_k x k ,使x i x_i x i 和x j x_j x j 均由x k x_k x k 密度可达,则称x i x_i x i 和x j x_j x j 密度相连。密度相连满足对称性。
DBSCAN算法流程
输入样本集D = { x 1 , x 2 , . . . , x m } D=\begin{Bmatrix}x_1,x_2,...,x_m\end{Bmatrix} D = { x 1 , x 2 , . . . , x m } ,邻域参数(ε \varepsilon ε 和M i n P t s MinPts M i n P t s ),样本距离度量方式。
1.初始化核心对象集合Ω = ∅ \Omega= \varnothing Ω = ∅ ,初始化聚类簇数K=0,初始化为未访问样本集合Γ = D \Gamma=D Γ = D ,簇划分C = ∅ C= \varnothing C = ∅ 。
2.对于j = 1 , 2 , 3... m j=1,2,3...m j = 1 , 2 , 3 . . . m ,按下面步骤找出所有核心对象:
a.通过距离度量方式,找到样本x j x_j x j 的ε \varepsilon ε 邻域子样本集N ε ( x j ) N_\varepsilon(x_j) N ε ( x j ) ;
b.若子样本集中样本个数满足N ε ( x j ) ≥ M i n P t s N_\varepsilon(x_j)\geq MinPts N ε ( x j ) ≥ M i n P t s ,则将样本x j x_j x j 加入核心对象样本集合Ω = Ω ∪ { x j } \Omega= \Omega\cup\begin{Bmatrix}x_j\end{Bmatrix} Ω = Ω ∪ { x j } ;
3.如果Ω = ∅ \Omega= \varnothing Ω = ∅ ,则算法结束,否则进入4;
4.在核心对象集合中,随机选择一个核心对象o,初始化当前簇核心对象队列Ω c u t = { o } \Omega_{cut}=\begin{Bmatrix}o\end{Bmatrix} Ω c u t = { o } ,初始化类别序号K = K + 1 K=K+1 K = K + 1 ,初始化当前簇样本集合C K = { o } C_K=\begin{Bmatrix}o\end{Bmatrix} C K = { o } ,更新未访问集合Γ = Γ − { o } \Gamma=\Gamma-\begin{Bmatrix}o\end{Bmatrix} Γ = Γ − { o } ;
5.若当前簇核心对象队列Ω c u t = ∅ \Omega_{cut}=\varnothing Ω c u t = ∅ ,则当前聚类簇C K C_K C K 生成完毕,更新簇划分C = { C 1 , C 2 , C 3 . . . C K } C= \begin{Bmatrix}C_1,C_2,C_3...C_K\end{Bmatrix} C = { C 1 , C 2 , C 3 . . . C K } ,更新核心对象集合Ω = Ω − C K \Omega= \Omega-C_K Ω = Ω − C K ,转入3;
6.在当前簇核心对象队列Ω c u t \Omega_{cut} Ω c u t 中取出一个核心对象o ′ o' o ′ ,通过邻域距离阈值ε \varepsilon ε 找出所有的ε \varepsilon ε 邻域子样本集N ε ( o ′ ) N_\varepsilon(o') N ε ( o ′ ) ,令Δ = N ε ( o ′ ) ∩ Γ \Delta =N_\varepsilon (o')\cap \Gamma Δ = N ε ( o ′ ) ∩ Γ ,更新当前簇样本集合C K = C K ∪ Δ C_K=C_K\cup\Delta C K = C K ∪ Δ ,更新未访问样本集合Γ = Γ − Δ \Gamma=\Gamma-\Delta Γ = Γ − Δ ,更新Ω c u t = Ω c u t ∪ ( N ε ( o ′ ) ∩ Ω ) \Omega_{cut}=\Omega_{cut}\cup(N_\varepsilon(o')\cap\Omega) Ω c u t = Ω c u t ∪ ( N ε ( o ′ ) ∩ Ω ) ,转入步骤5;
输出结果:簇划分C = { C 1 , C 2 , C 3 . . . C K } C= \begin{Bmatrix}C_1,C_2,C_3...C_K\end{Bmatrix} C = { C 1 , C 2 , C 3 . . . C K }
DBSCAN算法总结
优点:
1.可以对任意形状的稠密数据集进行聚类,K-Means一般只适用于凸数据集,而DBSCAN无此限制;
2.可以在聚类的同时发现异常点,对异常点不敏感;
3.聚类结果没有偏倚,相对的,K-Means初始值对聚类结果有很大影响。
缺点:
1.如果样本密度不均匀、聚类间距差相差很大时,聚类质量较差,这时一般不适用于DBSCAN;
2.如果数据较大时,收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来进行改进;
3.调参较传统的K-Means复杂,需要对ε \varepsilon ε 和M i n P t s MinPts M i n P t s 联合调参,不同参数组合对结果影响很大。