机器学习面试必知:DBSCAN

与传统的Kmeans相比,DBSCAN最大的不同就是不需要输入类别数k,最大的优势是可以发现任意形状的聚类簇。如果数据是稠密的,并且数据集不是凸的,那么DBSCAN就比Kmeans好用很多,如果数据不是稠密的,则不推荐用DBSCAN。

输入:样本集 D = ( x 1 , x 2 , . . . , x m ) D=(x_{1},x_{2},...,x_{m}) D=(x1,x2,...,xm),邻域数 ( ϵ , M i n N u m ) (\epsilon,MinNum) (ϵ,MinNum),样本距离度量方式

  1. 初始化核心对象集合 Ω = ∅ \Omega=\varnothing Ω=,初始化聚类簇数目k=0,初始化未访问样本集合 Γ = D \Gamma=D Γ=D,簇划分 C = ∅ C=\varnothing C=
  2. 对于 j = 1 , 2 , . . . , m j=1,2,...,m j=1,2,...,m,按照下面的步骤找出所有核心对象:
    . 通过距离度量方式,找到样本 x j x_{j} xj ϵ \epsilon ϵ-邻域子样本集 N ϵ ( x j ) N_{\epsilon}(x_{j}) Nϵ(xj)
    . 如果子样本集样本个数满足 ∣ N ϵ ( x j ) ∣ ≥ M i n N u m |N_{\epsilon}(x_{j})|\geq MinNum Nϵ(xj)MinNum,那么将样本 x j x_{j} xj加入核心对象样本集合 Ω = Ω ∪ { x j } \Omega=\Omega \cup \left\{ x_{j}\right\} Ω=Ω{xj}
  3. 如果核心对象集合 Ω = ∅ \Omega=\varnothing Ω=则算法结束,否则转入下一步
  4. 在核心对象集合 Ω \Omega Ω中,随机选择一个核心对象 o o o,初始化当前簇核心对象队列 Ω c u r = { o } \Omega _{cur}=\left\{ o \right\} Ωcur={o},初始化类别序号k=k+1,初始化当前簇样本集合 C k = { o } C _{k}=\left\{o\right\} Ck={o},更新未访问样本集合 Γ = Γ − { o } \Gamma=\Gamma-\left\{o\right\} Γ=Γ{o}
  5. 如果当前簇核心队列 Ω c u r = ∅ \Omega _{cur}=\varnothing Ωcur=,则当前聚类簇 C k C_{k} Ck生成完毕,更新簇划分 C = { C 1 , C 2 , . . . , C k } C=\left\{C_{1},C_{2},...,C_{k}\right\} C={C1,C2,...,Ck},更新对象集合 Ω = Ω − C k \Omega=\Omega-C_{k} Ω=ΩCk,转入步骤3
  6. 在当前簇核心队列取出一个核心对象 o ′ o' o,通过邻域距离阈值 ϵ \epsilon ϵ找出所有的邻域子样本集 N ϵ ( o ′ ) N_{\epsilon}(o') Nϵ(o),令 Δ = N ϵ ( o ′ ) ∩ Γ \Delta =N_{\epsilon}(o')\cap \Gamma Δ=Nϵ(o)Γ那么 C k = C k ∪ Δ , Γ = Γ − Δ , Ω c u r = Ω c u r ∪ ( Δ ∩ Ω ) − o ′ C_{k}=C_{k}\cup \Delta,\Gamma=\Gamma-\Delta,\Omega _{cur}=\Omega _{cur}\cup (\Delta \cap \Omega)-o' Ck=CkΔ,Γ=ΓΔ,Ωcur=Ωcur(ΔΩ)o,转到步骤5

输出:簇划分 C = { C 1 , C 2 , . . . , C k } C=\left\{C_{1},C_{2},...,C_{k}\right\} C={C1,C2,...,Ck}

优点:

  • 可以对任意形状的稠密数据集进行聚类,而Kmeans一般只适用于凸数据集
  • 可以在聚类的同时发现异常点,对数据集中的异常点不敏感
  • 聚类效果不像Kmeans那样受初始值的影响

缺点:

  • 样本集的密度不均匀,聚类间距相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合
  • 样本集较大,聚类收敛时间长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进
  • 调参相对于Kmeans稍显复杂,需要对距离阈值和样本阈值进行联合调参,不同的参数组合对最后的聚类效果有很大影响

你可能感兴趣的:(机器学习,面试)