DBSCAN的简要介绍和示例代码(对一维数据进行聚类)

一、简要介绍

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种常用的密度聚类算法,适用于发现任意形状的聚类簇,并且可以有效处理噪声数据。以下是关于DBSCAN的简要介绍:

  1. 密度概念:

    • DBSCAN基于密度的概念进行聚类,它定义了两个重要的参数:ϵ(邻域半径)和 MinPts(最小点数)。
    • ϵ指定了一个样本点的邻域范围,MinPts定义了一个核心点所需的邻域内最少样本点数量。
  2. 核心点、边界点和噪声点:

    • 核心点:在其ϵ-邻域内至少包含MinPts个样本点的点被称为核心点。
    • 边界点:在其ϵ-邻域内包含少于MinPts个样本点,但位于核心点的邻域内的点被称为边界点。
    • 噪声点:既不是核心点也不是边界点的点被称为噪声点。
  3. 聚类过程:

    • DBSCAN从一个未访问的样本点开始,探索其ϵ-邻域内的点。
    • 如果该点是核心点,则以该点为中心展开一个聚类;如果是边界点,则将其加入到与其关联的聚类中。
    • 不断重复这个过程,直到所有样本点都被访问过。
  4. 算法特点:

    • 能够有效识别任意形状的聚类簇,不受聚类形状的限制。
    • 能够处理噪声点,将其识别为单独的噪声簇。
    • 不需要预先指定簇的数量,由算法自动确定。
  5. 参数选择:

    • ϵ 和 MinPts 的选择对聚类结果有重要影响,需要根据数据集的特点进行调优。

总的来说,DBSCAN是一种强大的聚类算法,适用于处理具有不规则形状和噪声的数据集。通过基于密度的思想,DBSCAN能够高效地发现聚类簇,并适应不同类型的数据集。

相较于K-MEANS的一个显著优点是不需要事先知道要分成多少个簇,这对于解决“求数据有几类”的聚类问题很有效。但需要注意对ϵ 和 MinPts 的选择依赖于反复试验得到合适的经验值。


二、示例代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN# 生成一个包含30个随机整数的数组(1~100)
data = np.random.randint(1, 101, size=30)
# data=np.array([12, 14, 45, 65, 48, 99, 97, 94, 85, 13, 8, 66, 42, 87, 35, 27, 24, 4, 5, 84])
# 转换为二维数组以便于绘图(添加一个常数维度)
data_2d = data.reshape(-1, 1)
# 定义DBSCAN参数
eps = 7
min_samples = 3
# 应用DBSCAN算法
db = DBSCAN(eps=eps, min_samples=min_samples)
db.fit(data_2d)
# 获取聚类标签
labels = db.labels_# 创建颜色映射
unique_labels = set(labels)
colors = plt.cm.Spectral(np.linspace(0, 1, len(unique_labels)))
# 绘制散点图,不同颜色代表不同簇
plt.figure(figsize=(10, 6))
for k, col in zip(unique_labels, colors):if k == -1:  # -1代表噪声点,通常用灰色表示col = (0.5, 0.5, 0.5)class_member_mask = (labels == k)xy = data_2d[class_member_mask]plt.plot(xy[:, 0], [0] * len(xy), 'o', markerfacecolor=col, markeredgecolor='k', markersize=14)
plt.xlabel('Value')
plt.title('DBSCAN Clustering on 1D Data')
plt.grid(True)
plt.show()# 获取不包括噪声点的聚类数量
n_clusters = len(set(labels)) - (1 if -1 in labels else 0)
print(f"根据设定的参数,数据被分为{n_clusters}个簇(不包括噪声点)")
# 包括噪声点作为一类
n_clusters_including_noise = len(set(labels))
print(f"包括噪声点在内,数据被分为{n_clusters_including_noise}个类别")
# -*- coding :utf-8 -*-
# @FileName  :Clustering.py
# @Time      :2024/3/6 0:36
# @Author    :TRXCXimport numpy as np
from sklearn.cluster import DBSCAN# 参数是list,返回该list中的数据可以被分为几类(无噪声和有噪声)
def clustering(_s_data):data = np.array(_s_data)data_2d = data.reshape(-1, 1)eps = 7min_samples = 3db = DBSCAN(eps=eps, min_samples=min_samples)db.fit(data_2d)labels = db.labels_n_clusters = len(set(labels)) - (1 if -1 in labels else 0)n_clusters_including_noise = len(set(labels))return n_clusters, n_clusters_including_noiseif __name__ == '__main__':s_data = [12, 14, 45, 65, 48, 99, 97, 94, 85, 13, 8, 66, 42, 87, 35, 27, 24, 4, 5, 84]print(clustering(s_data))

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

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

相关文章

AI领域再出“王炸“----Claude3是否会成为下一个“神“

目录 一.Claude3最新发布 二.Claude3支持20万token 三.Claude3在未公开算法上取得重大突破 1.Claude 3读懂博士论文 2.量子跃迁集成: Claude 3智商:101 测试方法 测试细节 通过Karpathy挑战 Claude 3自画像,突破本我 从洛杉矶排到…

UR机器人装箱姿态

1.官网手册上并没有给出该打包位姿 2.一般厂家发回来的机器人都会有这个打包程序 可以运行这个程序,如果有的话。 3.打包点位 如果没有这个这个,也可以直接按下面点位来,都是差不多的点位,可以放到包装箱中的 这个是UR10的 这个…

Vulnhub靶机:Billu_b0x

一、介绍 运行环境:Virtualbox 攻击机:kali(192.168.56.101) 靶机:Billu_b0x(192.168.56.107) 目标:获取靶机root权限和flag 靶机下载地址:https://download.vulnhu…

智慧城市中的数据力量:大数据与AI的应用

目录 一、引言 二、大数据与AI技术的融合 三、大数据与AI在智慧城市中的应用 1、智慧交通 2、智慧环保 3、智慧公共安全 4、智慧公共服务 四、大数据与AI在智慧城市中的价值 1、提高城市管理的效率和水平 2、优化城市资源的配置和利用 3、提升市民的生活质量和幸福感…

【简单模拟】第十三届蓝桥杯省赛C++ B组《刷题统计》(c++)

1.题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。 他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。 请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题? 2.输入格式 输入一行包含三个整数 a,b 和 n。…

Vue+腾讯地图-实现关键词输入提示功能

不废话,上代码~~~ 效果图: 1、先去腾讯地图后台创建自己的应用获取到应用的 Key 腾讯地图后台地址:腾讯位置服务 - 立足生态,连接未来 创建应用的 Key 如下: 2、在项目中添加腾讯地图API的js插件,如…

CCF-A推荐会议 安全界顶会ACM CCS‘24 4月29日第二轮投稿!共建更安全的数字世界!

会议之眼 快讯 第31届ACM CCS (ACM Conference on Computer and Communications Security)即计算机和通信安全会议将于 2024 年 10月14日-18日在美国盐湖城举行!CCS是美国计算机协会(ACM)安全、审计与控制特别兴趣小组(SIGSAC)主办的一年一度的重要会议。是SIGSAC的…

Mint_21.3 drawing-area和goocanvas的FB笔记(三)

一、改变goocanvas线条自动画线时间间隔 通过系统SIGALRM信号触发,每秒画一条线对于慢温湿度等慢变信号可以应付,但对于快速信号1秒的间隔就太慢了。可以改变方式,通过另外的线程,完成要做的任务。 1. 线程的回调函数 myfunc 2…

Python读取influxDB数据库

1. influxDB连接 首先用InfluxDBStudio软件连接influxDB数据库来查看所有表: 2. 写sql语句来查询数据 然后和平时写sql查询语句一样,先创建连接client,然后调用其query函数来查询获取数据 self.client influxdb.InfluxDBClient(hostinflu…

抖店怎么做起来?2024新版操作逻辑,做项目要做一米宽万米深

我是王路飞。 不知不觉间,我已经在抖音电商这条赛道深耕走过了四年。 这四年里,我们有了自己的黑标品牌旗舰,有了自己的仓库配套周边,有了自己的模式体系人员,有了数不清的类目和产品操作经验。 收获着身后团队伙伴…

PXE网络启动实战(第二篇 使用WDS启动WIN10PE)

目录 一、PE光盘结构分析 二、WIM格式的部署 三、安装配置Windows部署服务 1.准备虚拟机 2.复制WinPE的ISO文件到服务器 3.将Win10PE的WIM释放出来 4.配置服务器,设置固定IP地址 5.安装DHCP、DNS服务

EdgeX Foundry - 连接 MQTT 设备

文章目录 一、概述1.安装说明2.MQTT 设备模拟器2.1.模拟器设计2.2.Spring Boot 程序源码2.2.1.MQTT2.2.2.JsonUtils2.2.3.Device 2.3.程序配置 二、连接 MQTT 设备1.docker-comepse2.设备配置文件3.启动 EdgeX Foundry4.访问 UI4.1. consul4.2. EdgeX Console 5.创建 MQTT 设备…

由数据范围反推算法复杂度以及算法内容

一般ACM或者笔试题的时间限制是1秒或2秒。 在这种情况下,C代码中的操作次数控制在 1 0 7 ∼ 1 0 8 10^7\sim10^8 107∼108为最佳。 下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择: n ≤ 30 n\leq30 n≤30,指数级别…

2024年字节跳动+京东+美团面试总结,程序员经验分享

现在的IT行业竞争压力越来越大,尤其是Android开发行业。而很多Android程序员却每天都在重复CRUD,原地徘徊! 今年年初,你就想改变现状,于是在网上刷了大量面试题,强行记下之后,开始参加面试!但是…

微信小程序开发系列(七)·如何实现小程序页面的快速跳转、小程序样式·尺寸单位rpx以及全局样式和局部样式的区别

微信小程序开发_时光の尘的博客-CSDN博客 目录 1. 小程序样式和组件介绍 2. 如何实现页面的快速跳转 3. 小程序样式尺寸单位rpx 3.1 使用px 3.2 使用rpx 4. 全局样式和局部样式 4.1 全局样式 4.2 局部样式 1. 小程序样式和组件介绍 在开发 Web网站的时候&am…

C语言深入学习 --- 2.指针的进阶

文章目录 第二章指针的进阶1.字符指针2.指针数组3.数组指针3.1数组指针的定义3.2 &数组名与数组名的区别3.3 数组指针的使用 4.数组参数与指针参数4.1 一维数组的传参4.2 二维数组的传参4.3 一级指针传参4.4 二级指针传参 5.函数指针6.函数指针数组7.指向函数指针数组的指针…

15 实战:Kaggle房价预测 + 课程竞赛:加州2020年房价预测【李沐动手学深度学习课程笔记】

15 实战:Kaggle房价预测 课程竞赛:加州2020年房价预测【李沐动手学深度学习课程笔记】https://zhuanlan.zhihu.com/p/685343754 写在前面:这里格式很乱,代码直接去知乎copy 1 实战Kaggle比赛:预测房价 1.1 实现几个函…

【系统安全加固】Centos 设置禁用密码并打开密钥登录

文章目录 一,概述二,操作步骤1. 服务器端生成密钥2. 在服务器上安装公钥3.下载私钥到本地(重要,否则后面无法登录)4. 修改配置文件,禁用密码并打开密钥登录5. 重启sshd服务6. 配置xshell使用密钥登录 一&am…

线段树及例题动态求连续区间和 Java代码

线段树 作用 1、单点修改 2、区间查询 相比于树状数组,线段树代码更复杂但应用更广泛 例题 Acwing 1264. 动态求连续区间和 给定 n n n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [ a , b ] [a,b] […

leetcode 200 . 岛屿数量

链接 : . - 力扣(LeetCode) 广搜 : BFS 适合于解决两个点之间的最短路问题 ; 以起始点为中心一圈一圈的进行搜索 , 一旦遇到终点 , 记录之前走过的结点就是一条最短路 ; 代码模板 : int dir[4][2] {0, 1, 1,…