DBSCAN密度聚类算法

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

1. 密度聚类原理

    DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。

    通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。

2. DBSCAN密度定义

    在上一节我们定性描述了密度聚类的基本思想,本节我们就看看DBSCAN是如何描述密度聚类的。DBSCAN是基于一组邻域来描述样本集的紧密程度的,参数(??, MinPts)用来描述邻域的样本分布紧密程度。其中,??描述了某一样本的邻域距离阈值,MinPts描述了某一样本的距离为??的邻域中样本个数的阈值。

    假设我的样本集是D=(x1,x2,...,xm)(x1,x2,...,xm),则DBSCAN具体的密度描述定义如下:

    1) ??-邻域:对于xj∈Dxj∈D,其??-邻域包含样本集D中与xjxj的距离不大于??的子样本集,即N?(xj)={xi∈D|distance(xi,xj)≤?}N?(xj)={xi∈D|distance(xi,xj)≤?}, 这个子样本集的个数记为|N?(xj)||N?(xj)| 

    2) 核心对象:对于任一样本xj∈Dxj∈D,如果其??-邻域对应的N?(xj)N?(xj)至少包含MinPts个样本,即如果|N?(xj)|≥MinPts|N?(xj)|≥MinPts,则xjxj是核心对象。 

    3)密度直达:如果xixi位于xjxj的??-邻域中,且xjxj是核心对象,则称xixi由xjxj密度直达。注意反之不一定成立,即此时不能说xjxj由xixi密度直达, 除非且xixi也是核心对象。

    4)密度可达:对于xixi和xjxj,如果存在样本样本序列p1,p2,...,pTp1,p2,...,pT,满足p1=xi,pT=xjp1=xi,pT=xj, 且pt+1pt+1由ptpt密度直达,则称xjxj由xixi密度可达。也就是说,密度可达满足传递性。此时序列中的传递样本p1,p2,...,pT?1p1,p2,...,pT?1均为核心对象,因为只有核心对象才能使其他样本密度直达。注意密度可达也不满足对称性,这个可以由密度直达的不对称性得出。

    5)密度相连:对于xixi和xjxj,如果存在核心对象样本xkxk,使xixi和xjxj均由xkxk密度可达,则称xixi和xjxj密度相连。注意密度相连关系是满足对称性的。

    从下图可以很容易看出理解上述定义,图中MinPts=5,红色的点都是核心对象,因为其??-邻域至少有5个样本。黑色的样本是非核心对象。所有核心对象密度直达的样本在以红色核心对象为中心的超球体内,如果不在超球体内,则不能密度直达。图中用绿色箭头连起来的核心对象组成了密度可达的样本序列。在这些密度可达的样本序列的??-邻域内所有的样本相互都是密度相连的。

    有了上述定义,DBSCAN的聚类定义就简单了。

3. DBSCAN密度聚类思想

    DBSCAN的聚类定义很简单:由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇。

    这个DBSCAN的簇里面可以有一个或者多个核心对象。如果只有一个核心对象,则簇里其他的非核心对象样本都在这个核心对象的??-邻域里;如果有多个核心对象,则簇里的任意一个核心对象的??-邻域中一定有一个其他的核心对象,否则这两个核心对象无法密度可达。这些核心对象的??-邻域里所有的样本的集合组成的一个DBSCAN聚类簇。

    那么怎么才能找到这样的簇样本集合呢?DBSCAN使用的方法很简单,它任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。接着继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。一直运行到所有核心对象都有类别为止。

    基本上这就是DBSCAN算法的主要内容了,是不是很简单?但是我们还是有三个问题没有考虑。

    第一个是一些异常样本点或者说少量游离于簇外的样本点,这些点不在任何一个核心对象在周围,在DBSCAN中,我们一般将这些样本点标记为噪音点。

    第二个是距离的度量问题,即如何计算某样本和核心对象样本的距离。在DBSCAN中,一般采用最近邻思想,采用某一种距离度量来衡量样本距离,比如欧式距离。这和KNN分类算法的最近邻思想完全相同。对应少量的样本,寻找最近邻可以直接去计算所有样本的距离,如果样本量较大,则一般采用KD树或者球树来快速的搜索最近邻。如果大家对于最近邻的思想,距离度量,KD树和球树不熟悉,建议参考之前写的另一篇文章K近邻法(KNN)原理小结

    第三种问题比较特殊,某些样本可能到两个核心对象的距离都小于??,但是这两个核心对象由于不是密度直达,又不属于同一个聚类簇,那么如果界定这个样本的类别呢?一般来说,此时DBSCAN采用先来后到,先进行聚类的类别簇会标记这个样本为它的类别。也就是说BDSCAN的算法不是完全稳定的算法。

4. DBSCAN聚类算法

    下面我们对DBSCAN聚类算法的流程做一个总结。

    输入:样本集D=(x1,x2,...,xm)(x1,x2,...,xm),邻域参数(?,MinPts)(?,MinPts), 样本距离度量方式

    输出: 簇划分C. 

    1)初始化核心对象集合Ω=?Ω=?, 初始化聚类簇数k=0,初始化未访问样本集合ΓΓ = D,  簇划分C = ??

    2) 对于j=1,2,...m, 按下面的步骤找出所有的核心对象:

      a) 通过距离度量方式,找到样本xjxj的??-邻域子样本集N?(xj)N?(xj)

      b) 如果子样本集样本个数满足|N?(xj)|≥MinPts|N?(xj)|≥MinPts, 将样本xjxj加入核心对象样本集合:Ω=Ω∪{xj}Ω=Ω∪{xj}

    3)如果核心对象集合Ω=?Ω=?,则算法结束,否则转入步骤4.

    4)在核心对象集合ΩΩ中,随机选择一个核心对象oo,初始化当前簇核心对象队列Ωcur={o}Ωcur={o}, 初始化类别序号k=k+1,初始化当前簇样本集合Ck={o}Ck={o}, 更新未访问样本集合Γ=Γ?{o}Γ=Γ?{o}

    5)如果当前簇核心对象队列Ωcur=?Ωcur=?,则当前聚类簇CkCk生成完毕, 更新簇划分C={C1,C2,...,Ck}{C1,C2,...,Ck}, 更新核心对象集合Ω=Ω?CkΩ=Ω?Ck, 转入步骤3。

    6)在当前簇核心对象队列ΩcurΩcur中取出一个核心对象o′o′,通过邻域距离阈值??找出所有的??-邻域子样本集N?(o′)N?(o′),令Δ=N?(o′)∩ΓΔ=N?(o′)∩Γ, 更新当前簇样本集合Ck=Ck∪ΔCk=Ck∪Δ, 更新未访问样本集合Γ=Γ?ΔΓ=Γ?Δ, 转入步骤5.

    输出结果为: 簇划分C={C1,C2,...,Ck}{C1,C2,...,Ck}

5. DBSCAN小结

    和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数k,当然它最大的优势是可以发现任意形状的聚类簇,而不是像K-Means,一般仅仅使用于凸的样本集聚类。同时它在聚类的同时还可以找出异常点,这点和BIRCH算法类似。

    那么我们什么时候需要用DBSCAN来聚类呢?一般来说,如果数据集是稠密的,并且数据集不是凸的,那么用DBSCAN会比K-Means聚类效果好很多。如果数据集不是稠密的,则不推荐用DBSCAN来聚类。

    下面对DBSCAN算法的优缺点做一个总结。

    DBSCAN的主要优点有:

    1) 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。

    2) 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。

    3) 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。

    DBSCAN的主要缺点有:

    1)如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。

    2) 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。

    3) 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值??,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

时间: 2024-08-04 10:27:48

DBSCAN密度聚类算法的相关文章

DBSCAN密度聚类

1. 密度聚类概念 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用于非凸样本集. 2. 密度聚类步骤 DBSCAN算法描述: 输入: 包含n个对象的数据库,半径e,最少数目MinPts; 输出:所有生成的簇,达到密度要求. (1)Repeat (

机器学习——聚类算法

本文主要讲解的聚类算法有:k均值算法.均值漂移算法.凝聚层次算法.DBSCAN密度聚类算法,还介绍了聚类算法性能指标——轮廓系数. 聚类(cluster)与分类(class)不同,分类是有监督学习模型,聚类属于无监督学习模型.聚类讲究使用一些算法把样本划分为n个群落.一般情况下,这种算法都需要计算欧几里得距离. $$P(x_1) - Q(x_2): |x_1-x_2| = \sqrt{(x_1-x_2)^2} \\P(x_1,y_1) - Q(x_2,y_2): \sqrt{(x_1-x_2)^

5.无监督学习-DBSCAN聚类算法及应用

DBSCAN方法及应用 1.DBSCAN密度聚类简介 DBSCAN 算法是一种基于密度的聚类算法: 1.聚类的时候不需要预先指定簇的个数 2.最终的簇的个数不确定DBSCAN算法将数据点分为三类: 1.核心点:在半径Eps内含有超过MinPts数目的点. 2.边界点:在半径Eps内点的数量小于MinPts,但是落在核心点的邻域内的点. 3.噪音点:既不是核心点也不是边界点的点. 如下图所示:图中黄色的点为边界点,因为在半径Eps内,它领域内的点不超过MinPts个,我们这里设置的MinPts为5

聚类算法--K-means和k-mediods/密度聚类/层次聚类

目录 简述 K-means聚类 密度聚类 层次聚类 一.简述 聚类算法是常见的无监督学习(无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类). 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善模型.而在聚类算法中是怎么来度量模型的好坏呢?聚类算法模型的性能度量大致有两类: 1)将模型结果与某个参考模型(或者称为外部指标)进行对比,个人觉得认为这种方法用的比较少 2)另一种是直接使用模型的内部属性,比如样本之间的距离(闵可夫斯基距离)来作为评判指标,这

【ML-7】聚类算法--K-means和k-mediods/密度聚类/层次聚类

目录 简述 K-means聚类 密度聚类 层次聚类 一.简述 聚类算法是常见的无监督学习(无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类). 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善模型.而在聚类算法中是怎么来度量模型的好坏呢?聚类算法模型的性能度量大致有两类: 1)将模型结果与某个参考模型(或者称为外部指标)进行对比,个人觉得认为这种方法用的比较少 2)另一种是直接使用模型的内部属性,比如样本之间的距离(闵可夫斯基距离)来作为评判指标,这

【转载】聚类算法小结

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

数据挖掘导论:2、密度聚类

密度聚类知识介绍:参见了这篇文章http://blog.csdn.net/uestcfrog/article/details/6876360 定义: 1.      对于空间中的一个对象,如果它在给定半径e的邻域中的对象个数大于密度阀值MinPts,则该对象被称为核心对象,否则称为边界对象. 2.      如果p是一个核心对象,q属于p的邻域,那么称p直接密度可达q. 3.      如果存在一条链<p1,p2,-..,pi>,满足p1=p,pi=q,pi直接密度可达pi+1,则称p密度可达

常见的5中聚类算法

聚类是机器学习中一种方法,常用用于处理数据分组的问题.给定一组数据,利用聚类算法将每一个数据点分批到一个特定的组.这就要求对于同一组的数据点,应该具有相同的性质(特征):对于不同组的数据点,在性质(特征)上应该有显著的区别.聚类算法数据无监督学习(unsupervised learning),常用于处理静态数据的分类问题. K-Means K-Means算法是一种简单的迭代性聚类算法,采用距离作为相似性度量指标.从而将给定的数据集分为K个类,每个类的中心是由该类中所有点的均值得到,每个类均由聚类

聚类算法和分类算法总结

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