1、什么是DBSCN

DBSCAN也是一个非常有用的聚类算法。

  • 它的主要优点:它不需要用户先验地设置簇的个数,可以划分具有复杂形状的簇,还可以找出不属于任何簇的点。
  • DBSCAN比凝聚聚类和k均值稍慢,但仍可以扩展到相对较大的数据集。

1.1算法原理

DBSCAN的原理是识别特征空间的“拥挤”区域中的点,在这些区域中许多数据点靠近在一起。这些区域被称为特征空间中的密集区域

  • DBSCAN背后的思想:簇形成数据的密集区域,并由相对较空的区域分隔开。

在密集区域内的点被称为核心样本(或核心点),它们的定义如下。

  • DBSCAN有两个参数:min_samples和eps。

    • 如果在距一个给定数据点eps的距离内至少有min_samples个数据点,那么这个数据点就是核心样本。
    • DBSCAN将彼此距离小于eps的核心样本放到同一个簇中。

一共有三种类型的点:核心点,与核心点的距离在eps之内的点(叫做边界点)和噪声

  • 如果DBSCAN算法在特定数据集上多次运行,那么核心点的聚类始终相同,同样的点也始终被标记为噪声。

    • 但边界点可能与不止一个簇的核心样本相邻。因此,边界点所属的簇依赖于数据点的访问顺序。
    • 一般来说只有很少的边界点,这种对访问顺序的轻度依赖并不重要。

2、应用于模拟数据make_blobs

  X, y = make_blobs(random_state=0,n_samples=12)

  dbscan = DBSCAN()

  clusters = dbscan.fit_predict(X)

  print("Cluster memberships:\n{}".format(clusters))
  • 输出:

    Cluster memberships:
    [-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]

因为eps和min_samples设置不当,所有的数据都被标记为噪声

  • 可视化

    mglearn.plots.plot_dbscan()

  • 在这张图中,属于簇的点是实心的,噪声点为空心。核心样本显示为较大的标记,边界点则显示为较小的标记。

    • 增大eps,扩大核心点的领域,会让一个簇变得更大
    • 增大min_samples会让一个簇中包含更多的点,同时核心点变小,噪声变多
  • eps更重要

    • 它决定了点与点之间“接近的含义”。

      • eps过小,没有点是核心样本
      • eps过大,所有点成单个簇
  • min_samples是为了判断稀疏区域内的点被标记为异常值还是形成自己的簇
    • 决定了簇的尺寸

3、应用于模拟数据make_moons

虽然DBSCAN不需要显式地设置簇的个数,但设置eps可以隐式地控制找到的簇的个数。使用StandardScaler或MinMaxScaler对数据进行缩放之后,有时会更容易找到eps的较好取值,因为使用这些缩放技术将确保所有特征具有相似的范围.

  from sklearn.datasets import make_moons
from sklearn.preprocessing import StandardScaler
from matplotlib import pyplot as plt X, y = make_moons(n_samples=200,noise=0.05,random_state=0) #将数据缩放成平均值为0,方差为1
scaler = StandardScaler().fit(X)
X_scaled = scaler.transform(X) dbscan = DBSCAN()
clusters = dbscan.fit_predict(X_scaled) #绘制簇分配 plt.scatter(X_scaled[:,0],X_scaled[:,1],c=clusters,cmap=mglearn.cm2,s=60)

可以看到,利用DBSCAN的默认设置,算法找到了两个半圆形并将其分开。

由于算法找到了我们想要的簇的个数(2个),因此参数设置的效果很好。

  • 如果将eps减小到0.2(默认值为0.5),我们将会得到8个簇,这显然太多了。
  • 将eps增大到0.7则会导致只有一个簇。

4、参考文献

《python机器学习基础教程》P143-P147

聚类--DBSCN的更多相关文章

  1. 用scikit-learn学习谱聚类

    在谱聚类(spectral clustering)原理总结中,我们对谱聚类的原理做了总结.这里我们就对scikit-learn中谱聚类的使用做一个总结. 1. scikit-learn谱聚类概述 在s ...

  2. 谱聚类(spectral clustering)原理总结

    谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...

  3. 用scikit-learn学习DBSCAN聚类

    在DBSCAN密度聚类算法中,我们对DBSCAN聚类算法的原理做了总结,本文就对如何用scikit-learn来学习DBSCAN聚类做一个总结,重点讲述参数的意义和需要调参的参数. 1. scikit ...

  4. DBSCAN密度聚类算法

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

  5. 用scikit-learn学习BIRCH聚类

    在BIRCH聚类算法原理中,我们对BIRCH聚类算法的原理做了总结,本文就对scikit-learn中BIRCH算法的使用做一个总结. 1. scikit-learn之BIRCH类 在scikit-l ...

  6. 基于改进人工蜂群算法的K均值聚类算法(附MATLAB版源代码)

    其实一直以来也没有准备在园子里发这样的文章,相对来说,算法改进放在园子里还是会稍稍显得格格不入.但是最近邮箱收到的几封邮件让我觉得有必要通过我的博客把过去做过的东西分享出去更给更多需要的人.从论文刊登 ...

  7. 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...

  8. K-Means 聚类算法

    K-Means 概念定义: K-Means 是一种基于距离的排他的聚类划分方法. 上面的 K-Means 描述中包含了几个概念: 聚类(Clustering):K-Means 是一种聚类分析(Clus ...

  9. BIRCH聚类算法原理

    在K-Means聚类算法原理中,我们讲到了K-Means和Mini Batch K-Means的聚类原理.这里我们再来看看另外一种常见的聚类算法BIRCH.BIRCH算法比较适合于数据量大,类别数K也 ...

随机推荐

  1. 一个关于小程序与单片机的通信实例(TCP/IP)

    前言 这是一个18年初的创业项目的核心功能要求,我们当时打算做一个共享类的项目,项目的主题是共享图书,线下的形式租借图书,我们当时是考虑做一个借书柜的形式,然后线下生产投放借书柜,这些借书柜本身能存放 ...

  2. 微信小程序 使用filter过滤器几种方式

    由于微信小程序 技术生态比较闭合,导致很多 现代前端框架很多积累出的成果都没有实现(可能未来会逐一实现). 用惯了现代 再耍小程序 总感觉很不顺手. 需要结果的请直接看最后的WXS View Filt ...

  3. 记一次dotnet拆分包,并希望得大佬指点

    记一次dotnet拆分包,并希望得大佬指点 之前做了一个用于excel导入导出的包, 定义了一些接口, 然后基于 NPOI EPPlus MiniExcel 做了三种实现 接口大概长下面这样(现在可以 ...

  4. Chrome JSON格式化插件

    1.JSONView插件下载地址:https://github.com/gildas-lormeau/JSONView-for-Chrome 2.解压(E:\json) 3.打开Chrome-扩展程序 ...

  5. oracle 11g rac集群 asm磁盘组增加硬盘

    创建asm磁盘的几种方式 创建asm磁盘方式很多主要有以下几种 1.Faking方式 2.裸设备方式 3.udev方式(它下面有两种方式) 3.1 uuid方式 3.2 raw方式(裸设备方式) 4. ...

  6. Queue实现

    1.Queue接口: public interface Queue<E> { int getSize(); boolean isEmpty(); void enqueue(E e); E ...

  7. VMware虚拟机无法安装Win11解决方法 (暂时全网最全方案)

    目录 1.现象 1.蓝屏重启 2.如下图示,无法启动 2.解决方案 2.1 Hyper-V方案 2.2 禁用 Device Guard(系统:win11) 2.3 升级虚拟机VMware pro的版本 ...

  8. Java创建boolean型数组

    Java如何声明并初始化一个boolean型的数组? public class Main{ static boolean[] arr1 = new boolean[20]; public static ...

  9. 关于visualvm无法监控本地java进程

    https://blog.csdn.net/weixin_43827693/article/details/105990675?spm=1001.2101.3001.6661.1&utm_me ...

  10. Druid SQL和Security在美团点评的实践

    分享嘉宾:高大月@美团点评,Apache Kylin PMC成员,Druid Commiter 编辑整理:Druid中国用户组 6th MeetUp 出品平台:DataFunTalk -- 导读: 长 ...