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

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. 移动吉比特H2-2光猫超级用户与密码

    移动吉比特H2-2光猫超级用户与密码 超级用户名CMCCAdmin 密码aDm8H%MdA----------------版权声明:本文为CSDN博主「BenSon.Album」的原创文章,遵循CC ...

  2. 习题3-4 周期串(Periodic Strings, UVa455)

    #include<stdio.h> #include<string.h> char s[100]; int main() { int T; scanf("%d&quo ...

  3. 我是先学C语言还是先学C++,实不相瞒,鱼和熊掌可兼得!

    这是最近一周时间几个读者小伙伴所提的问题,我顺手截了两个图. 实不相瞒,这类问题之前也经常看到.     每次遇到这种问题,看起来很简单,但是打字一时半会还真说不清,想想今天周末了,写一篇文章来统一聊 ...

  4. centos8上使用crond

    一,查看crond的状态: [root@yjweb crontab]# systemctl status crond 说明:和其他service的执行相同: 启动:systemctl start cr ...

  5. 【事件中心 Azure Event Hub】使用Logstash消费EventHub中的event时遇见的几种异常(TimeoutException, ReceiverDisconnectedException)

    问题描述 使用EFK(Elasticsearch, Fluentd and Kibana)在收集日志的解决方案中, 可以先把日志发送到EventHub中,然后通过Logstash消费EventHub中 ...

  6. 安装Linux注意事项

    网络配置NAT Worstation 生成虚拟网卡,编辑虚拟网络中子网IP地址为10网段内部地址,避免冲突.  Linux命令 查看主机IP地址 [root@C8 ~]# hostname -I 19 ...

  7. Afinal简介和使用方法

    Afinal简介 Afinal 是一个android的sqlite orm 和 ioc 框架.同时封装了android中的http框架,使其更加简单易用: 使用finalBitmap,无需考虑bitm ...

  8. Python开发 常见异常和解决办法

    1.sqlalchemy创建外键关系报错property of that name exists on mapper SQLAlchemy是Python编程语言下的一款开源软件,提供了SQL工具包及对 ...

  9. 【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常

    1. 踩坑经历 上周,一个用户反馈他创建的某个销售单无法打开,但其余销售单都可以正常打开,当时查看了生产环境的ERROR日志,发现抛了这样的异常:java.lang.NumberFormatExcep ...

  10. RxJava用法

    首先导入依赖: implementation 'io.reactivex.rxjava2:rxjava:2.2.9'implementation 'io.reactivex.rxjava2:rxand ...