DBSCAN聚类算法原理

DBSCAN聚类算法原理

基础

DBSCAND算法的全称是ensity-based spatial clustering of applications with noise (DBSCAN),从原理上讲,该算法属于OPTICS算法的一种特殊情况,而OPTICS算法就是DBSCAND算法的推广。

概念与定义

与OPTICS算法类似,DBSCAND算法的输入参数同样包括:半径 ε ,和最少点数 MinPts ;不同的是DBSCAND算法中有样本与样本直间分为直接(密度)可达与(密度)可达两种情况,定义分别如下:

  • 直接(密度)可达:
  • P为核心点,那么其周围在半径 ε 内的点都是从P直接(密度)可达。

  • (密度)可达:

  • 对于点Q,如果存在 p1,p2,...,pn p1=p2,...,pn1=pn,pn=Q ,即 p1 pn 都是直接(密度)可达的,那么Q对于 p1 (密度)可达。

  • 噪声:

  • 如果一个点对于其他所有点都不可达,那么这个点就是outlier。

算法过程

  • 输入:数据样本D,初始化所有点为未访问,半径 ε ,和最少点数 MinPts

  • 1、建立neighbor队列;

  • 2、如果D中数据全部处理完,则算法结束,否则从D中选择一个未处理的点,标记为已访问,获得其所有直接密度可达点,如果为非核心点则标记为noise,重复步骤2,否则生成新的cluster,进入步骤3;
  • 3、将当前核心点放入该cluster,将该核心点的直接密度可达点放入neighbor队列,并遍历该队列,如果neighbor队列全部遍历完则回溯至步骤2;
  • 3.1 如果该点已经访问过,则进入步骤3.2,否则标记为已访问,然后获得该点的所有密度可达点,如果这个点也为核心点,则将该点的所有直接密度可达点放入neighbor队列;
  • 3.2 如果该点不属于任何cluster,则放入当前cluster;
  • 4、算法结束。

伪代码

DBSCAN(D, eps, MinPts) {
   C = 0
   for each point P in dataset D {
      if P is visited
         continue next point
      mark P as visited
      NeighborPts = regionQuery(P, eps)
      if sizeof(NeighborPts) < MinPts
         mark P as NOISE
      else {
         C = next cluster
         expandCluster(P, NeighborPts, C, eps, MinPts)
      }
   }
}

expandCluster(P, NeighborPts, C, eps, MinPts) {
   add P to cluster C
   for each point P' in NeighborPts { 
      if P' is not visited {
         mark P' as visited
         NeighborPts' = regionQuery(P', eps)
         if sizeof(NeighborPts') >= MinPts
            NeighborPts = NeighborPts joined with NeighborPts'
      }
      if P' is not yet member of any cluster
         add P' to cluster C
   }
}

regionQuery(P, eps)
   return all points within P's eps-neighborhood (including P)

你可能感兴趣的:(算法相关,机器学习)