Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >DBSCAN聚类算法详解

DBSCAN聚类算法详解

作者头像
生信修炼手册
发布于 2021-03-24 09:14:41
发布于 2021-03-24 09:14:41
1.2K00
代码可运行
举报
文章被收录于专栏:生信修炼手册生信修炼手册
运行总次数:0
代码可运行

DBSCAN全称如下

Density-Based Spatial Clustering of Applications with Noise

是一种基于密度的聚类算法,所谓密度,就是说样本的紧密程度对应其类别,属于同一个cluster的样本是紧密相连的。为了定量描述紧密相连,首先引入以下3个因素

1. distance funcition, 距离的度量方式,通过距离来定量描述样本点之间的关系,这里的距离可以是欧式距离之类的计算公式

2. Epsilon, 距离的阈值,用于定义一个邻域,通过统计邻域内的样本个数来定义样本类型

3. minPoints, 领域内的最小样本数,如果大于该阈值,则将样本称之为核心样本

在DSCAN算法中,将样本划分为以下3类,图示如下

1. core point, eps邻域内的样本数大于minPoints

2. border points, eps邻域内的样本数小于minPoints

3. noise points, 噪音点,不属于任何core points的邻域内

在eps邻域和minPoints的基础上, 通过以下两个概念来描述样本的紧密相连

1. 密度直达

如下图所示

样本X在核心样本Y的邻域内,则称Y到X是密度直达的,注意这个关系是单向的,反向不一定成立

2. 密度可达

如下图所示

核心样本Y到核心样本P3是密度直达的,核心样本P3到核心样本P2是密度直达的,核心样本P2到样本X是密度直达的,像这种通过P3和P2的中转,在样本Y到样本X建立的关系叫做密度可达。

3. 密度相连

如下图所示

核心样本O到样本Y是密度可达的,同时核心样本O到样本X是密度可达的,这样的关系,我们可以说样本X和样本Y是密度相连的。

对于一系列密度可达的点而言,其邻域范围内的点都是密度相连的,下图所示是一个minPoints为5的领域,红色点为core ponit, 绿色箭头连接起来的则是密度可达的样本集合,在这些样本点的邻域内的点构成了一个密度相连的样本集合,这些样本就属于同一个cluster

DBSCAN的聚类过程就是根据核心点来推导出最大密度相连的样本集合,首先随机寻找一个核心样本点,按照minPoiints和eps来推导其密度相连的点,赋予一个cluser编号,然后再选择一个没有赋予类别的核心样本点,开始推导其密度相连的样本结合,一直迭代到所有的核心样本点都有对应的类别为止。

在scikit-learn中,使用DBSCAN聚类的代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> from sklearn.cluster import DBSCAN
>>> from sklearn import metrics
>>> from sklearn.datasets import make_blobs
>>> from sklearn.preprocessing import StandardScaler
>>> centers = [[1, 1], [-1, -1], [1, -1]]
>>> X, labels_true = make_blobs(n_samples=750, centers=centers, cluster_std=0.4,
... random_state=0)
>>>
>>> X = StandardScaler().fit_transform(X)
>>> db = DBSCAN(eps=0.3, min_samples=10).fit(X)
>>> core_samples_mask = np.zeros_like(db.labels_, dtype=bool)
>>> core_samples_mask[db.core_sample_indices_] = True
>>> labels = db.labels_

labels_属性记载了样本对应的cluster编号,其中编号为-1的为噪音点,上述聚类的结果可视化如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>>> n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
>>> n_noise_ = list(labels).count(-1)
>>> import matplotlib.pyplot as plt
>>> unique_labels = set(labels)
>>> colors = [plt.cm.Spectral(each)
...           for each in np.linspace(0, 1, len(unique_labels))]
>>> for k, col in zip(unique_labels, colors):
...     if k == -1:
...         # Black used for noise.
...         col = [0, 0, 0, 1]
...     class_member_mask = (labels == k)
...     xy = X[class_member_mask & core_samples_mask]
...     plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
...              markeredgecolor='k', markersize=14)
...     xy = X[class_member_mask & ~core_samples_mask]
...     plt.plot(xy[:, 0], xy[:, 1], 'o', markerfacecolor=tuple(col),
...              markeredgecolor='k', markersize=6)
...
[<matplotlib.lines.Line2D object at 0x11840CE8>]
[<matplotlib.lines.Line2D object at 0x11840EB0>]
[<matplotlib.lines.Line2D object at 0x11851088>]
[<matplotlib.lines.Line2D object at 0x11851238>]
[<matplotlib.lines.Line2D object at 0x118513E8>]
[<matplotlib.lines.Line2D object at 0x11851598>]
[<matplotlib.lines.Line2D object at 0x11851748>]
[<matplotlib.lines.Line2D object at 0x118518F8>]
>>> plt.title('Estimated number of clusters: %d' % n_clusters_)
Text(0.5, 1.0, 'Estimated number of clusters: 3')
>>> plt.show()

结果如下所示

相比kmeans算法,DBSCAN算法不需要事先指定聚类的类别数目K,而且适用的范围更广泛,可以对任意形状的数据进行聚类,同时还可以发现异常值点。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OPTICS聚类算法详解
DBSCAN算法对于邻域半径eps和最小样本数minPoints这两个参数比较敏感,不同的参数取值会产生不同的聚类效果。为了降低参数设置对聚类结果造成的不稳定性,在DBSCAN算法的基础上,提出了OPTICS算法,全称如下
生信修炼手册
2021/03/24
2.7K0
OPTICS聚类算法详解
使用Python实现DBSCAN聚类算法
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它可以有效地识别具有任意形状的簇,并且能够自动识别噪声点。在本文中,我们将使用Python来实现一个基本的DBSCAN聚类算法,并介绍其原理和实现过程。
Echo_Wish
2024/04/14
7700
聚类算法之DBSCAN聚类
DBSCAN (Density-Based Spatial Clustering of Applications with Noise) 是一种基于密度的聚类算法,基于密度的聚类寻找被低密度区域分离的高密度区域。常用于异常值或者离群点检测。
Ewdager
2020/07/14
3.4K0
聚类算法之DBSCAN聚类
DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式
一、DBSCAN聚类概述 基于密度的方法的特点是不依赖于距离,而是依赖于密度,从而克服基于距离的算法只能发现“球形”聚簇的缺点。 DBSCAN的核心思想是从某个核心点出发,不断向密度可达的区域扩张
悟乙己
2018/01/02
4.4K0
DBSCAN聚类︱scikit-learn中一种基于密度的聚类方式
Python+sklearn使用DBSCAN聚类算法案例一则
DBSCAN聚类算法概述: DBSCAN属于密度聚类算法,把类定义为密度相连对象的最大集合,通过在样本空间中不断搜索最大集合完成聚类。 DBSCAN能够在带有噪点的样本空间中发现任意形状的聚类并排除噪点。 DBSCAN算法不需要预先指定聚类数量,但对用户设定的参数非常敏感。 当空间聚类的密度不均匀、聚类间距差相差很大时,聚类质量较差。 DBSCAN算法基本概念: 核心对象:如果给定对象的半径eps邻域内样本数量超过阈值min_samples,则称为核心对象。 边界对象:在半径eps内点的数量小于min_sa
Python小屋屋主
2018/04/16
2.9K0
Python+sklearn使用DBSCAN聚类算法案例一则
通透!十大聚类算法全总结!!
这些聚类算法各有优缺点,适用于不同类型的数据和不同的应用场景。选择合适的聚类算法通常取决于具体的需求、数据的特性和计算资源。
Python编程爱好者
2023/11/28
4.8K0
通透!十大聚类算法全总结!!
深度解读DBSCAN聚类算法:技术与实战全解析
在机器学习的众多子领域中,聚类算法一直占据着不可忽视的地位。它们无需预先标注的数据,就能将数据集分组,组内元素相似度高,组间差异大。这种无监督学习的能力,使得聚类算法成为探索未知数据的有力工具。DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是这一领域的杰出代表,它以其独特的密度定义和能力,处理有噪声的复杂数据集,揭示了数据中潜藏的自然结构。
TechLead
2023/11/08
2.5K0
深度解读DBSCAN聚类算法:技术与实战全解析
探索Python中的聚类算法:DBSCAN
在机器学习领域中,DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种常用的聚类算法。与传统的聚类算法(如K-means)不同,DBSCAN 能够发现任意形状的簇,并且可以有效地处理噪声数据。本文将详细介绍 DBSCAN 算法的原理、实现步骤以及如何使用 Python 进行编程实践。
Echo_Wish
2024/03/23
6500
机器学习-06-无监督算法-02-层次聚类和密度聚类DBSCAN算法
本系列是机器学习课程的系列课程,主要介绍机器学习中无监督算法,包括层次和密度聚类等。
用户2225445
2024/03/23
2340
机器学习-06-无监督算法-02-层次聚类和密度聚类DBSCAN算法
用scikit-learn学习DBSCAN聚类
    在DBSCAN密度聚类算法中,我们对DBSCAN聚类算法的原理做了总结,本文就对如何用scikit-learn来学习DBSCAN聚类做一个总结,重点讲述参数的意义和需要调参的参数。
刘建平Pinard
2018/08/14
2.3K0
用scikit-learn学习DBSCAN聚类
DBSCAN密度聚类详解
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,基于密度的带有噪声的空间聚类应用)是一种基于密度的聚类算法。
皮大大
2024/06/14
3380
20分钟学会DBSCAN聚类算法
DBSCAN是一种非常著名的基于密度的聚类算法。其英文全称是 Density-Based Spatial Clustering of Applications with Noise,意即:一种基于密度,对噪声鲁棒的空间聚类算法。直观效果上看,DBSCAN算法可以找到样本点的全部密集区域,并把这些密集区域当做一个一个的聚类簇。
lyhue1991
2020/07/20
4.1K0
20分钟学会DBSCAN聚类算法
从DBSCAN算法谈谈聚类算法
最近看了一篇关于电子商务防欺诈的相关论文,其中在构建信用卡的个人行为证书中用到了DBSCAN算法。 具体内容请参看论文: Credit card fraud detection: A fusion approach using Dempster–Shafer theory and Bayesian learning。 我就想深入了解下这个聚类方法是怎么工作的。在思考这个具体DBSCAN算法的形成过程中,我还参看了: 1. wikipedia DBSCAN的相关介绍 2. 博文简单易学的机器学习算法——基于密度的聚类算法DBSCAN 3. 论文-A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise 等相关文献。此篇博文尝试讲清楚”物以类聚,人以群分”这个概念,DBSCAN算法中两个参数的实际物理含义,以及它背后所做的基本假设,由于这方面资料不多,因此都属于个人的猜想,不代表发明DBSCAN算法作者本身的想法,且这也是我正式学习聚类算法中的第一个算法,由于知识的局限性,如有不当,请指正。
用户1147447
2019/05/26
1.3K0
聚类之dbscan算法
简要的说明: dbscan为一个密度聚类算法,无需指定聚类个数。 python的简单实例: 1 # coding:utf-8 2 from sklearn.cluster import DBSCAN 3 import numpy as np 4 import matplotlib.pyplot as plt 5 from sklearn import metrics 6 from sklearn.datasets import make_blobs 7 from sklearn.preproc
Gxjun
2018/03/27
1.2K0
聚类之dbscan算法
【数据挖掘】任务5:K-means/DBSCAN聚类:双层正方形
eps:ϵ-邻域的距离阈值,和样本距离超过ϵ的样本点不在ϵ-邻域内,默认值是0.5。
zstar
2022/09/01
2080
【数据挖掘】任务5:K-means/DBSCAN聚类:双层正方形
Sklearn参数详解—聚类算法
聚类是一种非监督学习,是将一份给定数据集划分成k类,这一份数据集可能是某公司的一批用户,也可能是某媒体网站的一系列文章,如果是某公司的一批用户,那么k-means做的就是根据用户的表现对用户的分类;如果媒体的文章,那么k-means做的就是根据文章的类型,把他分到不同的类别。
张俊红
2018/07/30
1.6K0
Sklearn参数详解—聚类算法
详解DBSCAN聚类
基于密度的噪声应用空间聚类(DBSCAN)是一种无监督的ML聚类算法。无监督的意思是它不使用预先标记的目标来聚类数据点。聚类是指试图将相似的数据点分组到人工确定的组或簇中。它可以替代KMeans和层次聚类等流行的聚类算法。
deephub
2020/08/21
1.9K0
详解DBSCAN聚类
机器学习之鸢尾花-聚类
将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。
python与大数据分析
2022/03/11
7180
机器学习之鸢尾花-聚类
DBSCAN聚类算法Python实现
DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。
里克贝斯
2021/05/21
2.9K1
DBSCAN聚类算法Python实现
简单易学的机器学习算法——基于密度的聚类算法DBSCAN
    最近在Science上的一篇基于密度的聚类算法《Clustering by fast search and find of density peaks》引起了大家的关注(在我的博文“论文中的机器学习算法——基于密度峰值的聚类算法”中也进行了中文的描述)。于是我就想了解下基于密度的聚类算法,熟悉下基于密度的聚类算法与基于距离的聚类算法,如K-Means算法之间的区别。
felixzhao
2019/02/27
1.1K0
简单易学的机器学习算法——基于密度的聚类算法DBSCAN
相关推荐
OPTICS聚类算法详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档