【转】常用聚类算法(一) DBSCAN算法

原文链接:http://www.cnblogs.com/chaosimple/p/3164775.html#undefined

1、DBSCAN简介

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇,并在具有噪声的空间数据库中发现任意形状的簇,它将簇定义为密度相连的点的最大集合。

该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其他空间对象)的数目不小于某一给定阈值。DBSCAN算法的显著优点是聚类速度快且能够有效处理噪声点和发现任意形状的空间聚类。但是由于它直接对整个数据库进行操作且进行聚类时使用了一个全局性的表征密度的参数,因此也具有两个比较明显的弱点:

(1)当数据量增大时,要求较大的内存支持I/O消耗也很大;

(2)当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差。


2、DBSCAN和传统聚类算法对比

DBSCAN算法的目的在于过滤低密度区域,发现稠密度样本点。跟传统的基于层次的聚类和划分聚类的凸形聚类簇不同,该算法可以发现任意形状的聚类簇,与传统的算法相比它有如下优点:

(1)与K-MEANS比较起来,不需要输入要划分的聚类个数;

(2)聚类簇的形状没有偏倚;

(3)可以在需要时输入过滤噪声的参数;


3、算法涉及的基本定义:

1邻域:给定对象半径  内的区域称为该对象的邻域。

2)核心对象:如果给定对象 邻域内的样本点数大于等于MinPts,则称该对象为核心对象。

3)直接密度可达:给定一个对象集合D,如果p在q的邻域内,且q是一个核心对象,则我们说对象p从对象q出发是直接密度可达的(directly density-reachable)。

4)密度可达:对于样本集合D,如果存在一个对象链,对于 是从 关于和 MinPts直接密度可达,则对象p是从对象q关于和 MinPts密度可达的(density-reachable)。

5)密度相连:如果存在对象,使对象p和q都是从o关于和 MinPts密度可达的,那么对象p到q是关于和 MinPts密度相连的(density-connected)。

可以发现,密度可达是直接密度可达的传递闭包,并且这种关系是非对称的。只有核心对象之间相互密度可达。然而,密度相连是对称关系。DBSCAN目的是找到密度相连对象的最大集合。


4、DBSCAN算法的聚类过程

DBSCAN算法基于一个事实:一个聚类可以由其中的任何核心对象唯一确定。等价可以表述为:任一满足核心对象条件的数据对象p,数据库D中所有从p密度可达的数据对象o所组成的集合构成了一个完整的聚类C,且p属于C。

算法的具体聚类过程如下:

      扫描整个数据集,找到任意一个核心点,对该核心点进行扩充。扩充的方法是寻找从该核心点出发的所有密度相连的数据点(注意是密度相连)。遍历该核心点的邻域内的所有核心点(因为边界点是无法扩充的),寻找与这些数据点密度相连的点,直到没有可以扩充的数据点为止。最后聚类成的簇的边界节点都是非核心数据点。之后就是重新扫描数据集(不包括之前寻找到的簇中的任何数据点),寻找没有被聚类的核心点,再重复上面的步骤,对该核心点进行扩充直到数据集中没有新的核心点为止。数据集中没有包含在任何簇中的数据点就构成异常点。


5、算法伪代码

算法描述:

算法: DBSCAN

输入: E——半径

MinPts——给定点在E邻域内成为核心对象的最小邻域点数。

D——集合。

输出: 目标类簇集合

方法: Repeat

1) 判断输入点是否为核心对象

2) 找出核心对象的E邻域中的所有直接密度可达点。

Until 所有输入点都判断完毕

Repeat

针对所有核心对象的E邻域内所有直接密度可达点找到最大密度相连对象集合,中间涉及到一些密度可达对象的合并。

Until 所有核心对象的E领域都遍历完毕

时间: 2024-10-10 21:16:40

【转】常用聚类算法(一) DBSCAN算法的相关文章

数据挖掘算法:DBSCAN算法的C++实现

(期末考试快到了,所以比较粗糙,请各位读者理解..) 一.    概念 DBSCAN是一种产生划分聚类的基于密度的聚类算法,簇的个数由算法自动地确定.低密度区域中的点被视为噪声而忽略,因此DBSCAN不产生完全聚类. 二.    伪代码 1    将所有点标记为核心点.边界点和噪声点. 2    删除噪声点. 3    为距离在Eps之内的所有核心点之间赋予一条边. 4    每组连通的核心点形成一个簇. 5    将每个边界点指派到一个与之关联的核心点的簇中. 三.    重要数据结构 1  

基于密度的聚类之Dbscan算法

一.算法概述 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法.与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类(笔者认为是因为他不是基于距离的,基于距离的发现的是球状簇). 该算法利用基于密度的聚类的概念,即要求聚类空间中的一定区域内所包含对象(点或其他空间对象)的数目不小于某一给

基于密度聚类的DBSCAN算法

根据各行业特性,人们提出了多种聚类算法,简单分为:基于层次.划分.密度.图论.网格和模型的几大类. 其中,基于密度的聚类算法以DBSCAN最具有代表性. 假设有如下图的一组数据, 生成数据的R代码如下 x1 <- seq(0,pi,length.out=100) y1 <- sin(x1) + 0.1*rnorm(100) x2 <- 1.5+ seq(0,pi,length.out=100) y2 <- cos(x2) + 0.1*rnorm(100) data <- da

聚类分析之基于密度的聚类算法(DBSCAN)

一  什么是基于密度的聚类算法 由于层次聚类算法和划分式聚类算往往只能发现凸形的聚类簇.为了弥补这一缺陷,发现各种任意形状的聚类簇,开发出基于密度的聚类算法.这类算法认为,在整个样本空间点中,各目标类簇是由一群的稠密样本点组成的,而这些稠密样本点被低密度区域(噪声)分割,而算法的目的就是要过滤低密度区域,发现稠密样本点. 二  DBSCAN(Density-based Spatial Clustering of Applications with Noise) 是一种基于高密度联通区域的聚类算法

机器学习--聚类系列--DBSCAN算法

DBSCAN算法 基本概念:(Density-Based Spatial Clustering of Applications with Noise) 核心对象:若某个点的密度达到算法设定的阈值则其为核心点.(即 r 邻域内点的数量不小于 minPts) ε-邻域的距离阈值:设定的半径r 直接密度可达:若某点p在点q的 r 邻域内,且q是核心点则p-q直接密度可达. 密度可达:若有一个点的序列q0.q1....qk,对任意qi-qi-1是直接密度可达的,则称从q0到qk密度可达,这实际上是直接密

聚类算法和分类算法总结

原文:http://blog.chinaunix.net/uid-10289334-id-3758310.html 聚类算法的种类: 基于划分聚类算法(partition clustering) k-means: 是一种典型的划分聚类算法,它用一个聚类的中心来代表一个簇,即在迭代过程中选择的聚点不一定是聚类中的一个点,该算法只能处理数值型数据 k-modes: K-Means算法的扩展,采用简单匹配方法来度量分类型数据的相似度 k-prototypes: 结合了K-Means和K-Modes两种

DBSCAN算法

一.基于密度的聚类算法简介 DBSCAN是数据挖掘中最经典基于密度的聚类算法. 基于密度的聚类算法的核心是,通过某个点r邻域内样本点的数量来衡量该点所在空间的密度.和k-means算法的不同的是: 1.可以不需要事先指定cluster的个数. 2.可以找出不规则形状的cluster. 二.DBSCAN算法思想 该算法的参数是:r 和minPts r:表示某点领域的阈值. minPts:表示某点r邻域范围内样本点的数量. 核心点:若某点r邻域内样本点的数量不小于minPts,则该点就是核心点. 圆

[数据挖掘] - 聚类算法:K-means算法理解及SparkCore实现

聚类算法是机器学习中的一大重要算法,也是我们掌握机器学习的必须算法,下面对聚类算法中的K-means算法做一个简单的描述: 一.概述 K-means算法属于聚类算法中的直接聚类算法.给定一个对象(或记录)的集合,将这些对象划分为多个组或者“聚簇”,从而使同组内的对象间比较相似而不同组对象间差异比较大:换言之,聚类算法就是将相似的对象放到同一个聚簇中,而将不相似的对象放到不同的聚簇中.由于在聚类过程中不使用到类别标签,所以相似性的概念要基于对象的属性进行定义.应用不同则相似性规则和聚类算法一般不太

聚类:(K-means)算法

1.归类: 聚类(clustering) 属于非监督学习 (unsupervised learning) 无类别标记(class label) 2.举例: 3. K-means 算法: 3.1 Clustering 中的经典算法,数据挖掘十大经典算法之一      3.2 算法接受参数 k :然后将事先输入的n个数据对象划分为 k个聚类以便使得所获得的聚类满足:同一            聚类中的对象相似度较高:而不同聚类中的对象相似度较小.      3.3 算法思想: 以空间中k个点(可随机