机器学习 之 DBSCAN算法 及实现

news2024/9/20 18:33:13

1.K-means 与 DBSCAN 的比较

K-means 和 DBSCAN 都是聚类算法,但它们之间有显著的区别:

  • K-means

    • 基于中心点的方法,要求用户提前指定簇的数量。
    • 适用于球形簇,且簇大小相近。
    • 无法处理噪声数据和任意形状的簇。
  • DBSCAN

    • 基于密度的方法,无需提前指定簇的数量。
    • 可以发现任意形状的簇,并能识别噪声点。
    • 适合处理含有噪声的数据集和不规则形状的簇。

以下图中的数据为例,相比K-means,DBSCAN更适合作为数据的聚类算法。

2.DBSCAN 算法原理

DBSCAN (Density-Based Spatial Clustering of Applications with Noise) 是一种基于密度的聚类算法,其核心概念是通过密度来定义簇。DBSCAN 定义了一个点为核心点(Core Point),如果这个点周围半径 eps 内至少有 min_samples 个邻近点。如果一个点周围没有足够的邻近点,则被视为边界点(Border Point)。此外,任何不属于核心点或边界点的点都被视为噪声点。

3.实验代码详解

实验数据

data.txt 文件包含了多种啤酒的相关信息,具体来说,每一行代表了一种啤酒,并记录了四个属性:

  1. 名称 (name): 啤酒的品牌名称。
  2. 卡路里 (calories): 每份啤酒的卡路里含量。
  3. 钠含量 (sodium): 每份啤酒的钠含量。
  4. 酒精度 (alcohol): 啤酒的酒精百分比。
  5. 成本 (cost): 啤酒的成本或价格。

导入库和数据

import pandas as pd
from sklearn.cluster import DBSCAN
from sklearn import metrics

# 读取文件
beer = pd.read_table("data.txt", sep=' ', encoding='utf8', engine='python')

# 传入变量(列名)
X = beer[["calories", "sodium", "alcohol", "cost"]]

DBSCAN 聚类分析

db = DBSCAN(eps=20, min_samples=2).fit(X)
labels = db.labels_
解释:
  • 我们使用 DBSCAN 类进行聚类分析。
  • eps 参数定义了邻域的半径,即每个核心点周围必须有足够多的点才能成为核心点。
  • min_samples 参数定义了核心点周围必须有的最少邻近点数。
  • labels 是 DBSCAN 分配给每个样本的簇标签。标记 -1 表示该点被认为是噪声点。

添加结果至原始数据框

beer['cluster_db'] = labels
beer.sort_values('cluster_db')
解释:
  • 将 DBSCAN 的聚类结果添加到原始数据框 beer 中的新列 cluster_db
  • 使用 sort_values 方法按簇标签排序,这一步虽然不会改变数据框的内容(因为默认情况下它返回排序后的副本),但可以方便查看输出。

对聚类结果进行评分

score = metrics.silhouette_score(X, beer.cluster_db)
print(score)
解释:
  • 使用 metrics.silhouette_score 计算轮廓系数得分,该得分越高表示簇内的数据点越相似,簇间差异越大。
  • 输出得分以评估聚类的效果。

4.总结

通过上述步骤,我们完成了 DBSCAN 聚类分析的过程。与 K-means 相比,DBSCAN 具有以下优势:

  • 灵活性:DBSCAN 不需要预先知道簇的数量。
  • 噪声处理:DBSCAN 能够有效地识别和排除噪声点。
  • 任意形状簇:DBSCAN 能够发现任意形状的簇。

在本实验中,我们不仅实现了 DBSCAN 算法,还通过轮廓系数得分来评估聚类结果的质量。DBSCAN 的这些特性使其在处理复杂数据集时特别有用,尤其是在需要识别噪声和发现不规则簇形状的情况下。

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

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

相关文章

Mysql基础练习题 182.编写解决方案来报告所有重复的电子邮件 (力扣)

182.编写解决方案来报告所有重复的电子邮件。 请注意,可以保证电子邮件字段不为 NULL 建表插入数据: #建表插入数据 Create table If Not Exists Person (id int, email varchar(255)) Truncate table Person insert into Person (id, email) values (…

初识Vue.js:从零开始构建你的第一个Vue项目

初识Vue.js:从零开始构建你的第一个Vue项目 🚀 引言 简要介绍主题 在现代Web开发中,前端框架的选择至关重要。Vue.js作为一款渐进式JavaScript框架,以其简单易用、灵活高效的特性,迅速赢得了开发者的青睐。本篇文章将…

论文阅读与源码解析:CMX

论文阅读与源码解析:CMX: Cross-Modal Fusion for RGB-X Semantic Segmentation with Transformers 论文地址:https://arxiv.org/pdf/2203.04838 GitHub项目地址:https://github.com/huaaaliu/RGBX_Semantic_Segmentation 源码:h…

生产es所有节点全部掉线 排查

生产es所有节点全部掉线 查看message日志发现 内存溢出 修改jvm的改小 清理buff/cache sync && echo 1 > /proc/sys/vm/drop_caches sync && echo 2 > /proc/sys/vm/drop_caches sync && echo 3 > /proc/sys/vm/drop_caches 把es内存的…

GenAI 斜杠计划丨开启职业加速密码:图文设计专场参会体验

目录 前言 活动概览 活动开始:AI时代的召唤 主题分享一:《看到GenAI的力量:Amazon Bedrock功能操作》 1. 大模型的选择与理解 2. Amazon Bedrock的神奇魅力 主题分享二:《创意与技术的交汇:Zilliz向量数据库助力…

element的日期时间修改时间没有秒以及默认的时间时分修改

<el-form-item label"上架时间" required"required"><el-form:model"courseForm"ref"unmountFormRef"inlinestyle"text-align: left"label-position"left":rules"sjtimeRules"><el-form…

搜维尔科技:人形机器人的动作捕捉技术是实现机器人拟人化动作的关键技术之一

人形机器人的动作捕捉技术是实现机器人拟人化动作的关键技术之一&#xff0c;以下为您详细介绍几款动作捕捉系统&#xff1a; 1.光学式动作捕捉&#xff1a; • 原理&#xff1a;通过在人体关键部位&#xff08;如关节&#xff09;贴上反光标记点&#xff0c;利用多个高速摄像…

如何使用mcu 内置 flash 实现fatfs

一、环境与目的 AT32F403AVGT7&#xff0c;FLASH从0x80e0000到最后&#xff0c;共128K。扇区大小为512。 注意&#xff1a;Flash 的扇区大小为2KB。 fatfs 80286 /* Revision ID */ 目标在于利用单片机1MBflash后面的一小部分&#xff0c;以方便应用程序存储系统参数。 …

Ubuntu上安装剪切板管理软件

1. 更新系统和软件 确保你的系统和软件是最新的&#xff0c;有时更新可以修复这类错误。 sudo apt update sudo apt upgrade 2. 重新安装 Diodon 尝试卸载并重新安装 Diodon。 sudo apt remove diodon sudo apt install diodon 3. 检查依赖项 确保系统中安装了所有必要…

Aiseesoft Data Recovery for Mac:专业级数据恢复解决方案

在数字时代&#xff0c;数据的安全与恢复成为了我们不可忽视的重要议题。对于Mac用户而言&#xff0c;Aiseesoft Data Recovery无疑是一款值得信赖的专业级数据恢复软件。它以其强大的恢复能力、简洁的操作界面以及广泛的兼容性&#xff0c;在众多数据恢复工具中脱颖而出&#…

I 2U-Net: 一种具有丰富信息交互的双路径U-Net用于医学图像分割|文献速递-大模型与多模态诊断阿尔茨海默症与帕金森疾病

Title 题目 I 2U-Net: A dual-path U-Net with rich information interaction for medical image segmentation I 2U-Net: 一种具有丰富信息交互的双路径U-Net用于医学图像分割 01 文献速递介绍 在计算机视觉领域&#xff0c;医学图像分割是主要的挑战之一&#xff0c;例如…

【Java】—— Java面向对象基础:使用Java模拟银行账户与客户交易系统

目录 账户类&#xff08;Account&#xff09; 客户类&#xff08;Customer&#xff09; 测试类&#xff08;CustomerTest&#xff09; 运行结果 在今天的博文中&#xff0c;我们将通过Java编程语言来模拟一个简单的银行账户与客户交易系统。这个系统将包括两个主要类&#…

算法设计:实验四回溯法

【实验目的】 应用回溯法求解图的着色问题 【实验要求】 设下图G(V,E)是一连通无向图&#xff0c;有3种颜色&#xff0c;用这些颜色为G的各顶点着色&#xff0c;每个顶点着一种颜色&#xff0c;且相邻顶点颜色不同。试用回溯法设计一个算法&#xff0c;找出所有可能满足上述…

Cookie、Session、Token、JWT的区别

先总结 其实比较的话就只是Session、Token、JWT的区别&#xff0c;Session是基于Cookie的 这里暂时只比较Session和JWT的区别 存放位置不同 Session基于Cookie存储在服务端JWT存放在客户端&#xff0c;通常是在浏览器的Cookie或LocalStorage中。 JWT将 Token 和 Payload 加…

从学习到工作,2024年不可或缺的翻译助手精选

翻译工具利用先进的机器学习和自然语言处理技术&#xff0c;能够迅速将一种语言的文档转换为另一种语言&#xff0c;极大地促进了信息的无障碍流通。接下来&#xff0c;我们将介绍几款功能强大、操作简便的类似deepl翻译的工具&#xff0c;帮助你轻松应对各种翻译需求。 第一款…

容器网络(桥接、host、none)及跨主机网络(etcd、flannel、docker)

1.本地网络 1.bridge 所有容器连接到桥就可以使用外网&#xff0c;使用nat让容器可以访问外网&#xff0c;使用ip a s指令查看桥&#xff0c;所有容器连接到此桥&#xff0c;ip地址都是 172.17.0.0/16网段&#xff0c;桥是启动docker服务后出现&#xff0c;在centos使用bridge…

深度强化学习算法(五)(附带MATLAB程序)

深度强化学习&#xff08;Deep Reinforcement Learning, DRL&#xff09;结合了深度学习和强化学习的优点&#xff0c;能够处理具有高维状态和动作空间的复杂任务。它的核心思想是利用深度神经网络来逼近强化学习中的策略函数和价值函数&#xff0c;从而提高学习能力和决策效率…

数据结构(6.4_2)——最短路径问题_BFS算法

最短路径问题 BFS求无权图的单源最短路径 原代码 改造visit函数后

list的使用及其相关知识点

目录 ◉list的底层逻辑 ◉关于list的新增功能 ▲splice功能 ▲remove函数 ▲unique函数 ▲merge函数 ▲sort函数 ▣迭代器类型 ▲reverse函数 作为数据容器之一的list和其他容器的使用上有很多相似的地方&#xff0c;比如都有大致相同的构造函数&#xff0c;大致相同的头插尾插…

CUDA编程之CUDA Sample-5_Domain_Specific-volumeFiltering(光线追踪)

volumeFiltering演示了使用 3D 纹理和 3D 表面写入进行 3D 体积过滤。它从磁盘加载一个 3D 体积&#xff0c;并使用光线步进和 3D 纹理进行显示。 以下是该示例的主要内容和功能&#xff1a; 主要功能 3D 体积加载: 从磁盘加载 3D 体积数据&#xff0c;通常为医学成像数据或体…