完整版可关注公众号:大数据技术宅获取

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,基于密度的有噪应用中的空间聚类)是一种简单,却又在处理时空数据时表现不错的算法,借最近正好有看,这里整理下。不同于k-means,以中心点为原则进行聚类,只要样本点离同一个簇中心最近,就被划分到同一个簇中,且簇的形状是“类圆形”(凸形状)。DBSCAN将簇定义为密度相连的点的最大集合,即把样本点的密度情况作为聚类的基本原则,然后把相互之间有联系且聚集程度高的那些部分连接起来最终形成簇。

DBSCAN原理

DBSCAN的原理可以概括为:同一个簇,其样本两两相连;对于任意一个簇,对应的样本集是最大最完整的,即在所有样本点中,如果某个样本点是由一个簇中的点出发可达的,那么该点也将被划分到同一个簇。

然而,如何定义上述的相连和可达呢,下面将给出DBSCAN的相关概念。

DBSCAN相关概念

ϵ-邻域:以给定对象为中心,ϵ为半径的区域。

核心对象(核心点):对于给定的点数MinPts,如果点p的ϵ邻域包含至少MinPts个样本点(包含p),那么点p就被称作核心对象。

密度直达:如果点p为核心对象,样本点q出现在P的ϵ-邻域中,那么点q就是点p出发直接密度可达的(注意:不能说点p是由q出发密度直达的,除非q也是核心对象)。

密度可达:可达指从核心点出发可以到达的样本点。这里的到达分为2种情况:一种情况就是上面所说的密度直达的;另外一种,就是间接到达的。间接能到达就是说,可以找到一个对象链(序列),如p,p1,p2,...,pn,q(n>=1),其中后者从前者是密度直达的(p1由p直达,p1由p0直达,q由pn直达),那么q就是由核心对象p出发可达的,q是一个可达点。

密度相连:对于两个样本点p和q,如果能找到一个样本点o,使得o到p可达,同时o到q也可达,那么p和q就是密度相连的。

簇:最大的密度相连对象的集合。

噪声:不包含在任何簇中的对象。

为了让大家更直观的理解以上概念,给大家举个小例子(见下图,忽略字丑)。这里假设MinPts=4,ϵ=1cm,那么可以看出,对于左边2个图中标绿的点,显然为核心对象,因为以它们为中心,ϵ为半径画圆后,圆里边的样本点数均大于MinPts的值4。左图s为q出发的密度直达点;左图p为q出发密度可达点;中间那幅图,由于o到p可达,o到q可达,故p和q密度相连。右图由于最上边的那个样本点不在任何簇中,所以被归为噪声。

DBSCAN优缺点

(1)优点

无需指定簇个数

对任意形状的稠密数据集都可以聚类,簇的形状可以任意

擅长寻找离群点(检测任务)

(2)缺点:

不适用于样本集密度不均匀、聚类间距相差大的情况

样本集较大时,聚类收敛时间较长

参数不好选择(参数对聚类结果的影响较大)

DBSCAN聚类举例

(1)生成数据集

代码:

1#导入所需python模块

2from sklearn.datasets import make_blobs

3from sklearn.cluster import DBSCAN

4import matplotlib; matplotlib.use('TkAgg')

5import matplotlib.pyplot as plt

6import numpy as np

7#利用生成器生成具有三个簇的合成数据集,共1000个样本点,为方便作图,特征维度这里设为2

8X,t=make_blobs(n_samples=1000,n_features=2,centers=[[1.2,1.5],[2.2,1.1],[1.5,2.8]],cluster_std=[[0.3],[0.2],[0.25]],random_state=2020)

9#生成样本点的分布图

10fig=plt.figure(figsize=(8,8))

11ax=fig.add_subplot(111)

12ax.scatter(X[:,0],X[:,1])

13plt.show()

生成的样本点分布图:

机器学习——dbscan密度聚类的更多相关文章

  1. DBSCAN密度聚类算法

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-M ...

  2. 【转】DBSCAN密度聚类算法

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-M ...

  3. DBSCAN密度聚类

    1. 密度聚类概念 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密 ...

  4. (数据科学学习手札15)DBSCAN密度聚类法原理简介&Python与R的实现

    DBSCAN算法是一种很典型的密度聚类法,它与K-means等只能对凸样本集进行聚类的算法不同,它也可以处理非凸集. 关于DBSCAN算法的原理,笔者觉得下面这篇写的甚是清楚练达,推荐大家阅读: ht ...

  5. 密度聚类 - DBSCAN算法

    参考资料:python机器学习库sklearn——DBSCAN密度聚类,     Python实现DBScan import numpy as np from sklearn.cluster impo ...

  6. 密度聚类 DBSCAN

    刘建平:DBSCAN密度聚类算法 https://www.cnblogs.com/pinard/p/6208966.html API 的说明: https://www.jianshu.com/p/b0 ...

  7. Python之密度聚类

    # -*- coding: utf-8 -*- """ Created on Tue Sep 25 10:48:34 2018 @author: zhen "& ...

  8. 吴裕雄 python 机器学习——密度聚类DBSCAN模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...

  9. 机器学习算法总结(五)——聚类算法(K-means,密度聚类,层次聚类)

    本文介绍无监督学习算法,无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类,常见的无监督学习就是聚类算法. 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善 ...

随机推荐

  1. 爬虫之Selenium

    简介 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作,比如 ...

  2. asp.net 获取网站根目录总结 Global.asax文件里获取获取网站根目录

    1:  获取网站根目录的方法有几种如: Server.MapPath(Request.ServerVariables["PATH_INFO"])Server.MapPath(&qu ...

  3. 第十章 nginx常用配置介绍

    一.虚拟主机 1.配置方式 #虚拟主机配置方式:1.基于多IP的方式2.基于多端口的方式3.基于多域名的方式 2.方式一:基于多IP的方式 1.第一个配置文件[root@web02 /etc/ngin ...

  4. JS图片的放大与缩小

    <!doctype html><head><meta charset=utf-8" /><title>javascript控制图片缩小或者放大 ...

  5. 【计算几何 05】Pick定理

    什么是Pick定理(皮克定理) 来自wiki的介绍: 给定顶点座标均是整点(或正方形格子点)的简单多边形,皮克定理说明了其面积 \(A\)和内部格点数目 \(i\) .边上格点数目 \(b\) 的关系 ...

  6. jacoco-1-java代码测试覆盖率之本地环境初体验

    前言 jacoco是一个开源的覆盖率工具,它针对的开发语言是java,其使用方法很灵活,可以插桩到Ant.Maven中,可以使用其JavaAgent技术监控Java程序等. 那么本次主要使用对java ...

  7. centos7安装oracle版本的jdk

    Hadoop机器上的JDK,最好是Oracle的Java JDK,不然会有一些问题,比如可能没有JPS命令. 如果安装了其他版本的JDK,卸载掉!!! 1,查看是否已经安装了jdk java -ver ...

  8. Java基础之字面值

    概要:什么是字面值 字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值.比如在a = b * 2这个语句中,2就是一个字面值,它本身就是一个具体的值. 在Java源代码中,字面值用 ...

  9. CGANs

    Introducation 1. intruduce the conditional version of GANs, which can be constructed by simply feedi ...

  10. Linux常用操作命令大全

    0.新建操作:1.查看操作    2.删除操作 3.复制操作    4.移动操作:5.重命名操作: 6.解压压缩操作    7.上传文件工具    8.ln.file和touch命令 9.查找操作命令 ...