【Python机器学习】DBSCAN(具有噪声的基于密度的空间聚类应用)

DBSCAN(具有噪声的基于密度的空间聚类应用)是一种非常有用的聚类算法,它的主要优点是不需要用户先验地设置簇的个数,可以划分具有复杂形状的簇,还可以找出不属于任何簇的点。DBSCAN比凝聚聚类和k均值稍慢,但仍可以扩展到比较大的数据集。

DBSCAN的原理是识别特征空间的“拥挤”区域中的点,在这些区域中许多数据点靠近在一起。这些区域被称为特征空间中密集的密集区域。DBSCAN背后的思想是,簇形成数据的密集区域,并由相对较空的区域分隔开。

在密集区域的点被称为核心样本,他们的定义:

DBSCAN有两个参数 min_samples和eps。如果在距一个给给定数据点eps的距离内至少有min_samples个数据点,那么这个数据点就是核心样本。

DBSCAN将彼此距离小于eps的核心样本放在同一个簇中。

算法首先选取任何一个点,然后找到距离这个点的距离小于等于eps的所有的点。如果距离起始点的距离在eps之内的数据点个数小于min_samples,那么这个点被标记为噪声,也就是说这个点不属于任何簇。如果距离在eps内的数据点大于min_samples,那么这个点被标记为核心样本,并被分配一个新的簇标签。然后访问该点的所有在eps距离之内的邻居。如果他们还没有被分配给一个簇,那么就将刚刚创建的新的簇标签分配给他们。如果他们是核心样本,那么就继续依次访问其邻居,以此类推。簇逐渐增大,知道在簇的eps距离内没有更多的样本为止。然后在选取另一个未被访问过的点,并重复相同的过程。

最后,一共有三种类型的点:核心点,与核心点的距离在eps之内的点(边界点)和噪声。如果DBSCAN算法在特定的数据集上多次运行,那么核心点的聚类始终相同,同样的点也始终被标记为噪声。

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

与凝聚聚类相似,DBSCAN也不允许对新的测试数据进行预测,所以使用fit_predict方法来执行聚类并返回簇标签。

from sklearn.cluster import DBSCAN
from sklearn.datasets import make_blobsX,y=make_blobs(random_state=0,n_samples=12)dbscan=DBSCAN()
clusters=dbscan.fit_predict(X)
print('簇标签:\n{}'.format(clusters))

所有数据点都被分配了标签 -1,这代表噪声。这是eps和min_samples默认参数设置的结果,对于小型的数据集并没有调节这些参数。两参数取不同值时的簇分类如下:

import mglearn.plots
import matplotlib.pyplot as pltmglearn.plots.plot_dbscan()
plt.show()

在这张图里,属于簇的点是实心的,而噪声是空心的。核心样本显示为较大的标记,边界点显示为较小的标记。增大eps,更多的点会被包含在一个簇中。这会让簇变大,但也可能会导致多个簇合并为一个。增大min_samples,核心点会变得更少,更多的点被标记为噪声。

参数eps在某种程度上更重要,因为它决定了点与点之间“接近”的含义,如果eps设置的过小,意味着没有核心样本,所有的点都被标记为噪声;eps设置的过大,可能所有的点形成同一个簇。

设置min_samples主要是为了判断稀疏区域内的点被标记为异常值还是形成自己的簇。如果增大min_samples,任何一个包含少于min_samples个样本的簇现在将被标记为噪声。因此min_samples决定了簇的最小尺寸。

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

import mglearn.plots
import matplotlib.pyplot as plt
from sklearn.datasets import make_moons
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import DBSCANX,y=make_moons(n_samples=200,noise=0.05,random_state=0)
scaler=StandardScaler()
scaler.fit(X)
X_scaled=scaler.transform(X)dbscan=DBSCAN()
cluters=dbscan.fit_predict(X_scaled)plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.scatter(X_scaled[:,0],X_scaled[:,1],c=cluters,cmap=mglearn.cm2,s=60)
plt.xlabel('特征0')
plt.ylabel('特征1')
plt.show()

上图展示了在two_moons数据集上运行DBSCAN的结果。利用默认设置,算法找到了两个半圆形并将其分开。

由于算法找到了我们想要的簇的个数,因此参数设置的效果似乎很好。如果将eps减小到0.2,(默认为0.5),我们将会得到8个簇;增大到0.7将导致只剩一个簇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/33550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常见加密方式:MD5、DES/AES、RSA、Base64

16/32位的数据,最有可能就是使用md5加密的 使用对称加密的时候,双方使用相同的私钥 私钥:单独请求/隐藏在前端的隐藏标签当中 二、RSA非对称密钥加密 公钥加密,私钥解密 私钥是通过公钥计算生成的 加密解密算法都在js源文件当…

简单了解java中的File类

1、File类 1.1、概述 File对象就表示一个路径,可以是文件路径也可以是文件夹路径,这个路径可以 是存在的,也可以是不存在的。 1.2、常见的构造方法 方法名称说明public File(String pathname)根据文件路径创建文件…

0620# C++八股记录

如何防止头文件被重复包含 1. 使用宏定义(Include Guards) #ifndef HEADER_FILE_NAME_H #define HEADER_FILE_NAME_H// 头文件的内容#endif // HEADER_FILE_NAME_H例如,假设有一个头文件名为example.h,可以这样编写:…

U盘数据恢复全攻略:从原理到实践

一、引言:为何U盘数据恢复至关重要 在信息化时代,U盘作为便携存储设备,广泛应用于各个领域。然而,U盘数据的丢失往往给个人和企业带来极大的困扰。数据丢失的原因多种多样,可能是误删除、格式化、文件系统损坏&#x…

session 共享、Nginx session 共享、Token、Json web Token 【JWT】等认证

.NET JWT JWT 》》Json Web Token header . payload . Signature 三部分组成 JWT 在线生成 》》 https://jwt.io/ 》》https://tooltt.com/jwt-encode/ 》》解码工具 https://tool.box3.cn/jwt.html JWT 特点 无状态 JWT不需要在服务端存储任何状态,客户端可以携…

【FFMPEG+Mediamtx】 本地RTSP测试推流记录

利用本地FFMPEGMediamtx 搭建本地RTSP测试推流电脑摄像头 起因 本来要用qt的qml的Video做摄像头测试。 😔但是,不在现场,本地测试,又要测试rtsp流,又因为搜了一圈找不到一个比较好的在线测试rtsp推流网址&#x1f6…

自从用了这个 69k star 的项目,前端小姐姐再也不催我了

一般在开发前后端分离的项目时,双方会定义好前后端交互的 http 接口,根据接口文档各自进行开发。这样并行开发互不耽误,开发好后做个联调就可以提测了。 不过最近也不知道怎么回事,公司新来的前端小姐姐总是在刚开始开发的时候就…

全行业通用商城小程序源码

一站式购物新体验 一、引言:开启数字化购物新时代 在数字化快速发展的今天,小程序成为了商家们连接消费者的重要桥梁。特别是“全行业通用商城小程序”,以其便捷的购物体验和多样化的功能,成为了越来越多商家和消费者的首选。本…

嵌入式STM32F103项目实例可以按照以下步骤进行构建和实现

嵌入式STM32F103项目实例可以按照以下步骤进行构建和实现: 1. 项目概述 目标:演示STM32F103开发板的基本功能,通过LED闪烁来实现。硬件需求:STM32F103开发板、LED灯、杜邦线、USB转串口模块(可选,用于调试…

Day12 单调栈 下一个最大元素

503. 下一个更大元素 II 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数…

[AIGC] 动态规划的类型以及在 LeetCode 上的应用

动态规划是一种解决问题的优秀策略,它适用于涉及优化问题、组合问题及最短路径问题等领域。下面我们来探究几类常见的动态规划问题,并提供相应的 LeetCode 题目以及 Java 代码实现。 文章目录 1. 一维动态规划2. 二维动态规划3. 背包型动态规划 1. 一维动…

Unity URP简单烘焙场景步骤

Unity URP简单烘焙场景步骤 前言项目场景布置灯光模型Lighting设置环境设置烘焙前烘焙后增加角色 问题解决黑斑硬边清理缓存 参考 前言 项目中要烘焙一个3D场景,用的URP渲染管线,简单记录一下。 项目 场景布置 灯光 因为场景中有能动的东西&#xf…

JAVA每日作业day6.24

ok了家人们今天学习了一些关键字,用法和注意事项,静态代码块这些知识,闲话少叙我们一起看看吧。 一,final关键字 1.1 final关键字的概述 final: 不可改变。可以用于修饰类、方法和变量。 类:被修饰的类&a…

GPT-5 一年半后发布?对此你有何期待?

GPT-5的即将发布无疑引发了广泛的关注和讨论。以下是一些对GPT-5潜在影响和应用场景的见解和期待: 1. 提升工作效率 GPT-5可能会在很多领域进一步提升工作效率。其“博士级”智能在特定任务上的表现可以帮助专业人士更快地完成复杂的工作。例如,在法律…

Zoho邮箱怎么注册?最强完整指南

Zoho企业邮箱,凭借其16年的产品历程和卓越的服务品质,已经成为全球超过1800万企业级客户的信赖之选。今天,我们将手把手教你如何注册Zoho邮箱。 一、Zoho邮箱是什么? Zoho邮箱是Zoho Workplace套件中的核心产品,专门…

Java中的正则表达式使用技巧

Java中的正则表达式使用技巧 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们来探讨一下Java中正则表达式的使用技巧。正则表达式是一种强大…

【昇思初学入门】第六天打卡

函数式自动微分 学习心得 反向传播:神经网络在训练时,会使用一个叫做“反向传播”的方法。这个方法的基本思路是这样的:首先,神经网络会做出一个预测(我们称之为“logits”),然后我们将这个预…

【Python】已解决ModuleNotFoundError: No module named ‘requests’

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决ModuleNotFoundError: No module named ‘requests’ 一、分析问题背景 在使用Python进行网络编程或数据抓取时,requests库因其简洁易用的特性而受到广泛欢迎。然…

简说caffe

Caffe(Convolutional Architecture for Fast Feature Embedding)是一个开源的深度学习框架,由加州大学伯克利分校的Berkeley Vision and Learning Center(BVLC)开发。它主要用于图像分类、分割和图像生成等任务。以下是…

PrestaShop的一些使用介绍

目录 PrestaShop 是一个功能丰富的开源电子商务解决方案。 1. 以下是其基本概念和架构的一些要点: 2. PrestaShop 的模块开发是扩展其功能的重要方式。以下是对 PrestaShop 模块开发的详细介绍: 开发环境准备: 3. PrestaShop 的模块开发允…