DBSCAN算法简述:
为什么出现DBSCAN算法?

  当大家一说起聚类算法时候,最先想到的估计就是K-MeansMean-Shift算法了。但是,K-Means和Mean-Shift算法是通过距离聚类的方式来进行判别,需要设定类别参数,同时聚类的结果都是球状的簇。如果是非球状的分布结构,那么K-Means算法效果并不好。非球状结构的分布如下:

  像上述这样的分布结构,如果使用K-Means算法的话,聚类效果将会很差。那么这个时候DBSCAN算法就横空出世来解决这些问题。

  简单点说基于密度的聚类算法(Density-Based Spatial Clustering of Applications with Noise,DBSCAN)是一种基于密度的空间策略来进行聚类。通过初始化邻域半径 ϵ ϵ ϵ与最小点集个数 M i n p t s Minpts Minpts设定,来进行条件判断(核心点、边界点、噪音点等)迭代进行聚类。

DBSCAN算法原理:

  1 首先初始化DBSCAN算法的两个参数:邻域半径与最小点集个数的参数设定;

  2 选择一个初始点,判断是否是核心点,对于每一个核心点:选择一个未处理过的核心点,通过密度可达的原理对样本进行聚类生成簇。

  3 迭代重复以上的步骤直达所有的核心点都处理结束。

推荐一个DBSCAN算法动态显示聚类过程网站:传送门。

解释关于DBSCAN算法相关名词定义:

Figure 1 核心点与边界点相关解释

ϵ ϵ ϵ邻域与 M i n p t s Minpts Minpts:

  我们使用DBSCAN算法时候,需要初始化两个参数: ϵ ϵ ϵ代表判断该点是不是核心点的密度半径, M i n − p t s Min-pts Min−pts为在判断该点为中心,半径为 ϵ ϵ ϵ的点集个数判断指标。

核心点:

  如上图所示,将设半径设为 ϵ = 2 ϵ=2 ϵ=2同时 M i n p t s = 3 Minpts=3 Minpts=3时候,那么以上图红色的小方块为例:以它为圆心,半径为3的圆区域发现它的点数( > M i n p t s >Minpts >Minpts)大于3,即红色小方块为核心点

边界点:

  我们发现红色如果以红色小方块邻域的三个蓝色圆心,继续以它们为中心,半径为3的区域内并没有超过三个点,但是它们在红色小方块为核心点的区域内,那么它们属于边界点

噪音点:

  噪音点就是既不是核心点也不是边界点的第三种情况。

下面在解释密度直达、密度可达、密度相连的相关定义,首先看下示意图2如下:

Figure 2 密度直达 密度可达 密度相连示意图 图片来自于知乎作者:传送门

  上图2分别展示密度直达、密度可达、密度相连的相关定义,图(a)分别说明 p p p为边缘点, q q q为核心点, r r r为噪音点。

密度直达:

  定义:样本点 p p p是由样本点 q q q对于参数 { ϵ , M i n p t s } \{ϵ,Minpts\} {ϵ,Minpts}密度直达,满足条件为 q q q是核心点同时 p p p点在以 q q q为核心点的圆区域内。显示示意图(b)

密度可达:

  定义:如果存在一系列样本点 p 1 , p 2 , . . . , p n p_1,p_2,...,p_n p1​,p2​,...,pn​(其中 p 1 = q p_1=q p1​=q, p n = p p_n=p pn​=p)使得 p i + 1 p_{i+1} pi+1​可由样本点 p i p_i pi​密度直达,那么样本点 p p p可由样本点 q q q密度可达。示意图(c)

密度相连:

  定义:如果样本点 o o o对于样本点 p p p是密度可达的,同时样本点 o o o对于样本点 q q q也是密度可达的,那么我们称作样本点 p p p与样本点 q q q是密度相连的。示意图(d)

概念解释小结:

  密度直达:核心点 q q q邻域内存在边缘点 p p p,那么我们称作样本点 p p p是由样本点 q q q密度直达的。( p p p与 q q q是相邻的);

  密度可达:样本点 p p p是由一系列核心点传递到核心点 q q q的,那么我们称作样本点 p p p是由样本点 q q q密度可达。( p p p与 q q q具有传递性);

  密度相连:就是存在样本点 o o o对样本点 p p p密度可达,同时又对样本点 q q q密度可达,那么样本点 p p p与样本点 q q q密度相连。(某一个中间点到 p p p、 q q q密度可达单方向传递性);

DBSCAN算法优缺点:

优点:

  较其它聚类策略,例如K-Means只能适用于凸数据集,DBSCAN算法可以对任意形状的稠密数据集有效的聚类。

  DBSCAN聚类对异常点抗干扰性强,即对受孤立的点影响很小,即对数据集中的异常点不明感。

缺点:

  如果样本集的密度不均匀,聚类间距相差很大时,聚类质量较差,所以不适合使用DBSCAN算法。

  针对大数据样本集,聚类收敛时间较长(目前改进是通过KD树快速搜索或者对球树规模限制).

  DBSCAN有两个参数是经验设置(调参不是很容易):距离阈值 ϵ ϵ ϵ,邻域样本数阈值 M i n p t s Minpts Minpts,这两个参数设置都会对聚类效果影响很大。参数建议根据数据量和具体应用场景进行调节与设定。

DBSCAN算法Python代码实践:
# -*- coding:utf-8 -*-
import numpy as npfrom sklearn.cluster import DBSCAN
from sklearn import metrics
from sklearn.datasets.samples_generator import make_blobs
from sklearn.preprocessing import StandardScaler# Generate sample data
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)# Compute DBSCAN Algorithm
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_# Number of clusters in labels, ignoring noise if present
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
n_noise_ = list(labels).count(-1)print('Estimanted number of cluster: %d' % n_clusters_)
print('Estimated number of noise points: %d' % n_noise_)
print('Homogeneity: %0.3f' % metrics.homogeneity_score(labels_true, labels))
print('Completeness: %0.3f' % metrics.completeness_score(labels_true, labels))
print('V-measure: 0.3f' % metrics.v_measure_score(labels_true, labels))
print('Adjusted Rand Index: 0.3f'% metrics.adjusted_rand_score(labels_true, labels))print('Adjusted Mutual Information: %0.3f'% metrics.adjusted_mutual_info_score(labels_true, labels))print('Silhouette Coefficient: %0.3f' % metrics.silhouette_score(X, labels))# plot result
import matplotlib.pyplot as plt# Black removed and is used for noise instead
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 noisecol = [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)plt.title('Estimated number of clusters: %d' % n_clusters_)
plt.show()
聚类实验结果

参考

http://www.aaai.org/Papers/KDD/1996/KDD96-037.pdf

https://scikit-learn.org/stable/auto_examples/cluster/plot_dbscan.html#sphx-glr-auto-examples-cluster-plot-dbscan-py

https://www.researchgate.net/publication/221653977_A_Density-Based_Algorithm_for_Discovering_Clusters_in_Large_Spatial_Databases_with_Noise

https://www.biaodianfu.com/dbscan.html

聚类算法系列之密度聚类DBSCAN相关推荐

  1. 关于聚类算法Kmeans/K-mediods/层次聚类/OPTICS较为详细的介绍

    K-means算法 将一群物理对象或者抽象对象的划分成相似的对象类的过程.其中类簇是数据对象的集合,在类簇中所有的对象都彼此相似,而类簇与类簇之间的对象是彼此相异. 聚类除了可以用于数据分割(data ...

  2. 张伟伟-层次1 Mean_shift聚类算法和其他的聚类算法

    pycharm使用的简单教程 层次一 Mean_shift聚类算法和其他的聚类算法 作者介绍 1. 安装包的准备: 2. Mean-shift原理及实现 2.1 Mean-shift原理 2.2 主要 ...

  3. 聚类算法 距离矩阵_模糊聚类算法

    模糊聚类算法 1.如何理解模糊聚类 事物间的界线,有些是明确的,有些则是模糊的.当聚类涉及到事物之间的模糊界线时,需要运用模糊聚类分析方法. 如何理解模糊聚类的"模糊"呢:假设有两 ...

  4. K-means聚类算法和模糊C-means聚类算法

    K-means聚类算法和模糊C-means聚类算法 1.K-means聚类算法 K-means算法是硬聚类算法,是典型的基于原型的目标函数聚类方法的代表,它是数据点到原型的某种距离作为优化的目标函数, ...

  5. 聚类算法小记(part2)--谱聚类

    学习笔记,仅供参考,有错必纠 转载自:谱聚类(spectral clustering)原理总结 文章目录 谱聚类(spectral clustering)原理总结 谱聚类概述 谱聚类基础之一:无向权重 ...

  6. 道路匹配MapMatching:GPS轨迹点常用聚类算法介绍(K-Means聚类、蚁群算法等)

    道路匹配MapMatching:GPS轨迹点常用聚类算法介绍(K-Means聚类.蚁群算法等) 前言 一.聚类算法是什么? 二.道路匹配中常见聚类算法介绍 1.K-Means算法 2.基于时间和距离的 ...

  7. 聚类算法中 K均值聚类(KMeans)的python实现

    ** 聚类算法中 K均值聚类(KMeans)的python实现 ** import numpy as np import matplotlib.pyplot as plt from sklearn.d ...

  8. 聚类算法(3):DBSCAN密度聚类

    目录 1. 基本概念 2. 算法描述 3. 算法实例 4. 算法优缺点 DBSCAN(Density-Based Spatial Clustering of Application with Nois ...

  9. 机器学习算法-10贝叶斯信念网络、聚类算法、基于密度的方法DBSCAN

    贝叶斯信念神经网络 bayes belief network (BNN), 朴素贝叶斯分类器需要特征之间相互独立的强条件,制约了模型的适用, 用有向无环图表达变量之间的依赖关系,变量用节点表示,依赖关 ...

最新文章

  1. c++ 连续图片显示_计算整数的和并显示结果
  2. idea springBoot 配置devtools实现热部署
  3. 图灵奖公布!计算机图形学先驱 Hanrahan 和 Catmull 获奖,祝贺两位好莱坞 3D 动画大片技术元老...
  4. 杀毒软件免费下载 2013排行榜(TOP8)
  5. 微弱光信号检测MATLAB,基于数字锁相放大器的微弱光电信号检测研究
  6. 【SSD目标检测】1:图片、视频内的物体检测与定位
  7. go语言教程哪里有?go 语言优秀开源项目汇总
  8. 对自定义View的Measure和onMeasure的一点心得
  9. 如何准备项目启动大会
  10. 旋转卡壳凸包(不用一下子就学完所有)
  11. android 蓝牙发送失败怎么办,【报Bug】蓝牙模块CC2640R2F 安卓发送数据包第二次发送不成功{code:10007,message:property not support}...
  12. 还用户一片净土:广告自动拦截功能明年登陆Chrome
  13. 存储圈装逼必上TOP 10网站
  14. mysql 导入大于2m_用phpmyadmin导入大于2M的数据,导入大量数据的方法
  15. 【SAP-MM】收货发票的总账科目是在哪里定义的?
  16. SuperMap GIS 10i 新一代三维GIS技术白皮书
  17. 《The One!团队》第八次作业:ALPHA冲刺(四)
  18. Java中用for循环输出九九乘法表
  19. NFS常见问题及参数
  20. Kingbase金仓数据库学习小记

热门文章

  1. windows使用/服务(10)Win11预览版退回正式版方法介绍
  2. python缩进统一为4个空格-python缩进长度是否统一
  3. 关于数据表格的测试方法
  4. 全民小镇刷钻石攻略 土豪不是梦
  5. formatter java_Java笔记 - Java中的格式化输出,Formatter类的介绍
  6. Notepad++Plugin NPP_Export插件
  7. win10上启用MOV文件缩略图显示 - K-Lite Mega Codec Pack
  8. 手游怎么选择服务器?
  9. 简单六个步骤拍摄美丽的城市夜景
  10. 联想小新pro13笔记本外接显示屏没信号