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

谁说我不能喝 提交于 2020-01-04 00:25:13

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

DBSCAN算法最重要的两个参数是ε\varepsilonMinPtsMinPts,其中ε\varepsilon描述了某一样本的邻域距离阈值,MinPtsMinPts描述了某一样本的距离为ε\varepsilon的邻域中样本个数的阈值。

DBSCAN算法中的概念

ε\varepsilon 包含样本集DD中与某个样本xx的距离不大于ε\varepsilon的子样本集。
核心对象: 对于任意一个样本xx,若其ε\varepsilon邻域中至少包含MinPtsMinPts个样本,则该样本xx是核心对象。
密度直达:xix_i位于xjx_jε\varepsilon邻域中,且xjx_j是核心对象,则称xix_ixjx_j密度直达,反之不一定成立。
密度可达: 对于xix_ixjx_j,若存在样本序列{P1,P2,...,Pt}\begin{Bmatrix}P_1,P_2,...,P_t\end{Bmatrix},满足P1=xi,Pt=xjP_1=x_i,P_t=x_jPt+1P_{t+1}PtP_{t}密度直达,则称xix_ixjx_j密度可达。密度可达满足传递性,此时序列P1,P2,...,Pt1P_1,P_2,...,P_{t-1}均为核心对象,因为只有核心对象才能使其他样本密度直达。
密度相连: 对于xix_ixjx_j,若存在核心对象xkx_k,使xix_ixjx_j均由xkx_k密度可达,则称xix_ixjx_j密度相连。密度相连满足对称性。

DBSCAN算法流程

输入样本集D={x1,x2,...,xm}D=\begin{Bmatrix}x_1,x_2,...,x_m\end{Bmatrix},邻域参数(ε\varepsilonMinPtsMinPts),样本距离度量方式。

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

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

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

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

5.若当前簇核心对象队列Ωcut=\Omega_{cut}=\varnothing,则当前聚类簇CKC_K生成完毕,更新簇划分C={C1,C2,C3...CK}C= \begin{Bmatrix}C_1,C_2,C_3...C_K\end{Bmatrix},更新核心对象集合Ω=ΩCK\Omega= \Omega-C_K,转入3;

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

输出结果:簇划分C={C1,C2,C3...CK}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复杂,需要对ε\varepsilonMinPtsMinPts联合调参,不同参数组合对结果影响很大。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!