聚类算法之基于密度的聚类算法DBSCAN算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。

DBSCAN算法最重要的两个参数是 ε \varepsilon M i n P t s MinPts ,其中 ε \varepsilon 描述了某一样本的邻域距离阈值, M i n P t s MinPts 描述了某一样本的距离为 ε \varepsilon 的邻域中样本个数的阈值。

DBSCAN算法中的概念

ε \varepsilon 包含样本集 D D 中与某个样本 x x 的距离不大于 ε \varepsilon 的子样本集。
核心对象: 对于任意一个样本 x x ,若其 ε \varepsilon 邻域中至少包含 M i n P t s MinPts 个样本,则该样本 x x 是核心对象。
密度直达: x i x_i 位于 x j x_j ε \varepsilon 邻域中,且 x j x_j 是核心对象,则称 x i x_i x j x_j 密度直达,反之不一定成立。
密度可达: 对于 x i x_i x j x_j ,若存在样本序列 { P 1 , P 2 , . . . , P t } \begin{Bmatrix}P_1,P_2,...,P_t\end{Bmatrix} ,满足 P 1 = x i , P t = x j P_1=x_i,P_t=x_j P t + 1 P_{t+1} P t P_{t} 密度直达,则称 x i x_i x j x_j 密度可达。密度可达满足传递性,此时序列 P 1 , P 2 , . . . , P t 1 P_1,P_2,...,P_{t-1} 均为核心对象,因为只有核心对象才能使其他样本密度直达。
密度相连: 对于 x i x_i x j x_j ,若存在核心对象 x k x_k ,使 x i x_i x j x_j 均由 x k x_k 密度可达,则称 x i x_i x j x_j 密度相连。密度相连满足对称性。

DBSCAN算法流程

输入样本集 D = { x 1 , x 2 , . . . , x m } D=\begin{Bmatrix}x_1,x_2,...,x_m\end{Bmatrix} ,邻域参数( ε \varepsilon M i n P t s MinPts ),样本距离度量方式。

1.初始化核心对象集合 Ω = \Omega= \varnothing ,初始化聚类簇数K=0,初始化为未访问样本集合 Γ = D \Gamma=D ,簇划分 C = C= \varnothing

2.对于 j = 1 , 2 , 3... m j=1,2,3...m ,按下面步骤找出所有核心对象:
a.通过距离度量方式,找到样本 x j x_j ε \varepsilon 邻域子样本集 N ε ( x j ) N_\varepsilon(x_j)
b.若子样本集中样本个数满足 N ε ( x j ) M i n P t s N_\varepsilon(x_j)\geq MinPts ,则将样本 x j x_j 加入核心对象样本集合 Ω = Ω { x j } \Omega= \Omega\cup\begin{Bmatrix}x_j\end{Bmatrix}

3.如果 Ω = \Omega= \varnothing ,则算法结束,否则进入4;

4.在核心对象集合中,随机选择一个核心对象o,初始化当前簇核心对象队列 Ω c u t = { o } \Omega_{cut}=\begin{Bmatrix}o\end{Bmatrix} ,初始化类别序号 K = K + 1 K=K+1 ,初始化当前簇样本集合 C K = { o } C_K=\begin{Bmatrix}o\end{Bmatrix} ,更新未访问集合 Γ = Γ { o } \Gamma=\Gamma-\begin{Bmatrix}o\end{Bmatrix}

5.若当前簇核心对象队列 Ω c u t = \Omega_{cut}=\varnothing ,则当前聚类簇 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 K \Omega= \Omega-C_K ,转入3;

6.在当前簇核心对象队列 Ω c u t \Omega_{cut} 中取出一个核心对象 o o' ,通过邻域距离阈值 ε \varepsilon 找出所有的 ε \varepsilon 邻域子样本集 N ε ( o ) N_\varepsilon(o') ,令 Δ = N ε ( o ) Γ \Delta =N_\varepsilon (o')\cap \Gamma ,更新当前簇样本集合 C K = C K Δ C_K=C_K\cup\Delta ,更新未访问样本集合 Γ = Γ Δ \Gamma=\Gamma-\Delta ,更新 Ω c u t = Ω c u t ( N ε ( o ) Ω ) \Omega_{cut}=\Omega_{cut}\cup(N_\varepsilon(o')\cap\Omega) ,转入步骤5;

输出结果:簇划分 C = { C 1 , C 2 , C 3 . . . C K } C= \begin{Bmatrix}C_1,C_2,C_3...C_K\end{Bmatrix}

DBSCAN算法总结

优点:
1.可以对任意形状的稠密数据集进行聚类,K-Means一般只适用于凸数据集,而DBSCAN无此限制;
2.可以在聚类的同时发现异常点,对异常点不敏感;
3.聚类结果没有偏倚,相对的,K-Means初始值对聚类结果有很大影响。

缺点:
1.如果样本密度不均匀、聚类间距差相差很大时,聚类质量较差,这时一般不适用于DBSCAN;
2.如果数据较大时,收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来进行改进;
3.调参较传统的K-Means复杂,需要对 ε \varepsilon M i n P t s MinPts 联合调参,不同参数组合对结果影响很大。

发布了20 篇原创文章 · 获赞 10 · 访问量 1448

猜你喜欢

转载自blog.csdn.net/Jerry_Chang31/article/details/103825544