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

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常用操作学习笔记

    一,弹窗处理(推荐文章:https://blog.csdn.net/huilan_same/article/details/52298460) selenium提供switch_to方法定位弹窗的对话 ...

  2. CSP-S2020AFO记

    2020-10.11 考初赛辣. 选择题考了一堆时间复杂度,一个不会(卒) 我寻思这01背包哪里能用贪心? 啊,这,这,这手写快排竟如此简单,手写取Max,手写队列,两个字符串颠来倒去,竟活到爆! 震 ...

  3. python 爬虫 循环分页

    import osfrom time import sleepimport fakerimport requestsfrom lxml import etreefake = faker.Faker() ...

  4. Vue 父子组件通信入门

    父组件向子组件传值 1.组件实例定义方式,注意:子组件一定要使用props属性来定义父组件传递过来的数据 <script type="text/javascript"> ...

  5. eclipse配置打开选中文件存储的目录快捷配置

    方便同时复制多个包的文件 https://jingyan.baidu.com/article/adc8151353a896f723bf73cd.html

  6. DEM轨迹后处理

    更推荐的方法:https://www.cnblogs.com/Jay-CFD/p/12195294.html 2020.6.16更新 方法一:直接在paraview中显示 首先在输出颗粒信息的时候保存 ...

  7. IDEA配置类和方法注释模板

    1定义java文件头部的注释 2给java类中的方法添加上注释 2.1第一步勾选Enable Live  Templates 2.2第二步新建一个Group 2.3第三步新建一个Template 2. ...

  8. C#数据结构-线程安全队列

    什么是线程安全? 答:线程安全是多线程编程时的计算机程序代码中的一个概念.在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意 ...

  9. OpenCascade拓扑对象之:Face的方向、参数域和曲面间的关系

    @font-face { font-family: "Times New Roman" } @font-face { font-family: "宋体" } @ ...

  10. 分四个阶段学习python并找到一份好工作

    第一阶段 关注公众号"轻松学编程"了解更多. 详细学习资料 需要时间一个月. 1.python概念 ​ python是一种解释型.面向对象.动态数据类型的高级程序语言. ​ 理解: ...