聚类(DBSCAN)算法原理

JAVA herman 2286浏览 0评论
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用于非凸样本集。下面我们就对DBSCAN算法的原理做一个总结。

基于密度的聚类算法主要的目标是寻找被低密度区域分离的高密度区域。与基于距离的聚类算法不同的是,基于距离的聚类算法的聚类结果是球状的簇,而基于密度的聚类算法可以发现任意形状的聚类,这对于带有噪音点的数据起着重要的作用。

dbscan算法

密度聚类原理

DBSCAN(Density-Based Spatial Clustering of Application with Noise)是一种典型的基于密度的聚类算法,在DBSCAN算法中将数据点分为一下三类:

  • 核心点。在半径Eps内含有超过MinPts数目的点
  • 边界点。在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内
  • 噪音点。既不是核心点也不是边界点的点

在这里有两个量,一个是半径Eps,另一个是指定的数目MinPts。

  • Eps邻域。简单来讲就是与点的距离小于等于Eps的所有的点的集合,可以表示为
  • 直接密度可达。如果在核心对象的Eps邻域内,则称对象从对象出发是直接密度可达的。
  • 密度可达。对于对象链:是从关于Eps和MinPts直接密度可达的,则对象是从对象关于Eps和MinPts密度可达的。

DBSCAN算法优点:

  • 与K-means算法比起来,不需要预先输入划分的聚类个数。
  • 聚类形成的簇的形状可以是任意的。
  • 可以在需要的时候输入过滤噪声的参数。

DBSCAN算法的聚类过程:

  1. 初始状态,给出一个数据集D,并设置半径ε和MinPts,将D中的所有对象标记为"unvisited"(未被访问)
  2. 随机从D中选取一个未被访问的对象p,并标记为"visited"(已被访问),检查p的ε-邻域内是否至少包含MinPts个对象(即p是否是核心对象),若不是,则将p标记为噪声点,否则,为p创建一个新的簇C,把p的ε-邻域中所有对象放入候选集合N中,并迭代的将N中不属于其它簇的对象加入到新簇C中,在这个过程中,将N中的"unvisited"的对象q标记为"visited",若q的ε-邻域是否至少包含MinPts个对象,则将q的ε-邻域中所有的对象加入到C中,直到C不再扩大,N为空的时候,此时簇C完成聚类,并输出。
  3. 继续从D中随机选取未被访问的对象s,同样使用(2)中的聚类方法,直到对象集D中所有对象都被访问。

DBSCAN算法流程

下面是该算法的伪代码:

算法:DBSCAN,一种基于密度的聚类算法
输入:
	D:包含若干个对象的数据集
	ε:半径
	MinPts:密度邻域阈值
输出:簇的集合
方法:
	1.标记D中所有的对象为"unvisited";
	2.Do
	3.随机选择一个"unvisited"对象p;
	4.标记p为"visited";
	5.If p的ε-邻域至少含有MinPts个对象
	6.   创建一个新的簇C;
	7.   令N为p的ε-邻域对象的集合;
	8.   For N中的每个对象q
	9.       If q是"unvisited"
	10.          则标记q为"visited";
	11.          If q是核心对象
	12.              则将q的ε-邻域中的所有对象集合加到N中;
	13.          If q不属于其它簇
	14               则将q加入到簇C中;
	15.  End For;
	16.  输出C
	17.Else 标记p为噪声点
	18.Until D中所以对象都是"visited"

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » 聚类(DBSCAN)算法原理