DBSCAN算法

来源:互联网 发布:廖雪峰的javascript 编辑:程序博客网 时间:2024/05/22 04:37

基本概念

一. 基于密度的聚类算法 :寻找被低密度区域分离的高密度区域

区别于其他算法(基于对象之间的距离)

  1. 何为密度:特定点的密度通过在该点Eps半径之内的点的计数来估计,依赖于半径。
  2. 基于密度定义,将点分为:核心点(稠密区域内部的点),边界点(稠密区域边界上的点),噪声或背景点(稀疏区域中的点)
  3. 直接密度可达:q作为核心点,p在其Eqs邻域内,则p是从q出发直接密度可 达的。
  4. 密度可达:存在对象链p(1)到p(n),p(i+1)是p(i)直接密度可达,则pn是p1密度可达。
  5. 密度相连:如果存在对象O∈D,使对象p和q都是从O关于Eps和MinPts密度可达的,那么对象p到q是关于Eps和MinPts密度相连的(density-connected)。

    参数说明:半径Eps内含有超过MinPts数目的点使核心点,在半径Eps内点的数量小于MinPts,但是在核心点的邻居是边界点,边界点不是核心点,但是在核心点的邻域内,其余的是噪音点

    Eps邻域:在给定对象Eps内的邻域

二. 算法原理

  • DBSCAN通过检查数据集中每点的Eps邻域来搜索簇,如果点p的Eps邻域包含的点多于MinPts个,则创建一个以p为核心对象的簇;
  • 然后,DBSCAN迭代地聚集从这些核心对象直接密度可达的对象,这个过程可能涉及一些密度可达簇的合并;
  • 当没有新的点添加到任何簇时,该过程结束.

算法描述:
输入:数据集D,参数MinPts,Eps 输出:簇集合。

(1) 首先将数据集D中的所有对象标记为未处理状态  (2) for 数据集D中每个对象p do  (3)   if p已经归入某个簇或标记为噪声 then  (4)      continue;   (5)   else   (6)      检查对象p的Eps邻域                      ;(7)      if 邻域包含的对象数小于MinPts then  (8)         标记对象p为边界点或噪声点;  (9)      else  (10)        标记对象p为核心点,并建立新簇C, 并将p邻域内所有点加入C  (11)        for p邻域中所有尚未被处理的对象q  do  (12)            检查其Eps邻域,若包含至少MinPts个对象,则将邻域中未归入任何一个簇的对象加入C;  (13)        end for  (14)     end if  (15)   end if  (16) end for

二. 其他问题思考

  1. 如何选取Eps和MinPts:思想是这样的对于在一个类中的所有点,它们的第k个最近邻大概距离是一样的,噪声点的第k个最近邻的距离比较远,所以, 尝试根据每个点和它的第k个最近邻之间的距离来选取。