亦菲喊你来学机器学习(17) --DBSCAN聚类算法

news2024/11/24 16:48:58

文章目录

  • DBSCAN聚类算法
    • 基本概念
    • 算法步骤
    • 特点
    • 构建模型
      • 模型参数
      • 训练模型
      • 完整代码展示
  • 总结

DBSCAN聚类算法

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的空间聚类算法,它能够将具有足够高密度的区域划分为簇,并能在带有噪声的空间数据集中发现任意形状的簇。DBSCAN与K-means等传统聚类算法不同,它不需要事先指定簇的数量,并且能够有效地处理异常点(噪声)。

基本概念

  • 核心点(Core Point):如果某个点的ε-邻域内至少包含了MinPts个点,则称该点为核心点。
  • 边界点(Border Point):如果一个点不是核心点,但是它在某个核心点的ε-邻域内,则该点被称为边界点。
  • 噪声点(Noise Point):既不是核心点也不是边界点的点被认为是噪声点。
  • ε-邻域(Epsilon-Neighborhood):以某点为中心,ε为半径的空间区域。
  • MinPts(Minimum Points):形成核心点所需要的邻域内最小点数。

算法步骤

  1. 初始化:
    • 创建一个空集合C,用于存放所有的簇。
    • 遍历数据集中的每一个点p,如果p未被访问,则标记p为已访问并处理以p为起点的簇。
  2. 处理簇:
    • 如果p是核心点,则创建一个新簇C,并将p添加到C中。
    • 从p的ε-邻域中找出所有点,对于每一个这样的点q:
      • 如果q尚未被访问,则将其标记为已访问,并将其添加到C中。
      • 如果q是核心点,则递归地将q的ε-邻域中的所有点(除了已经访问过的点)添加到C中。
    • 如果p不是核心点,则p被标记为噪声点。
  3. 重复:
    • 重复上述过程,直到所有的点都被访问过。

在这里插入图片描述

如图所示,可以简单想象为,找到一个核心点,以该点为圆心,在其ε半径内画圆,在一起包含在其中的分为一类。重复定核心点、画圆操作,将数据分簇。

特点

  • 不需要事先指定簇的数量:与K-means不同,DBSCAN不需要用户指定簇的数量。
  • 能够发现任意形状的簇:由于DBSCAN是基于密度的,所以它能够识别出任何形状的簇,包括不规则形状的簇。
  • 对噪声和异常值不敏感:通过识别噪声点,DBSCAN能够处理包含噪声的数据集。
  • 参数敏感:DBSCAN的性能高度依赖于ε和MinPts两个参数的选择。

构建模型

注意:聚类算法训练数据都是数据本身没有分类标签的哦,聚类算法本身就是用来给数据分类的,所以会在训练模型时给数据自动分类,打上标签!!

模型参数

class sklearn.cluster.DBSCAN(eps=0.5,min_samples=5,metric='euclidean',
metric_params=None,algorithm='auto',leaf_size=30,p=None,n_jobs=None)

主要参数:eps,min_samples。其他参数可使用默认值

-- eps:ϵϵ-邻域的距离阈值,和样本距离超过ϵϵ的样本点不在ϵϵ-邻域内。默认值是0.5。一般需要通过在多组值里面选择一个合适的阈值。eps		过大,则更多的点会落在核心对象的ϵϵ-邻域,此时我们的类别数可能会减少,本来不应该是一类的样本也会被划为一类。反之则类别数		可能会增大,本来是一类的样本却被划分开。

-- min_samples:样本点要成为核心对象所需要的ϵϵ-邻域的样本数阈值。默认值是5. 一般需要通过在多组值里面选择一个合适的阈值。通常和				 eps一起调参。在eps一定的情况下,min_samples过大,则核心对象会过少,此时簇内部分本来是一类的样本可能会被标为				   噪音点,类别数也会变多。反之min_samples过小的话,则会产生大量的核心对象,可能会导致类别数过少。

训练模型

  1. 收集数据
    链接: 训练数据
    提取码: csns

  2. 数据预处理

从数据中取出需要的数据:

import pandas as pd
beer = pd.read_table('../Kmeans/data.txt',sep=' ',encoding='utf8')
x = beer[["calories","sodium","alcohol","cost"]]
  1. 训练模型

可调整邻域eps和邻域中样本数min_samples,来优化模型。

from sklearn.cluster import DBSCAN
db = DBSCAN(eps=20,min_samples=2).fit(x)
  1. 取出标签

在这里插入图片描述

模型训练完成之后,在模型内有参数labels_,这是模型对训练数据打上的标签:

labels = db.labels_
  1. 评估模型

使用metrics库中的silhouette_score()函数,调用该函数来计算聚类结果的轮廓系数。使用该函数时,需要传入聚类后的样本标签和样本特征数据。该函数结果范围为[-1,1],结果靠近1为合理。

样本标签:

beer['cluster_db'] = labels
beer.sort_values('cluster_db') #按分类排序

silhouette_score()函数使用:

score = metrics.silhouette_score(x,beer.cluster_db)
print(score)
----------------
0.6731775046455796

完整代码展示

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

beer = pd.read_table('../Kmeans/data.txt',sep=' ',encoding='utf8')

x = beer[["calories","sodium","alcohol","cost"]]
db = DBSCAN(eps=20,min_samples=2).fit(x)
labels = db.labels_
beer['cluster_db'] = labels
beer.sort_values('cluster_db')

score = metrics.silhouette_score(x,beer.cluster_db)
print(score)

这样,我们就构建好一个DBSCAN算法模型啦!!

总结

本篇介绍了:

  1. DBSCAN聚类算法是怎么实现的
  2. DBSCAN聚类算法不需要提前指定分几簇,它会自动分簇
  3. 算法模型训练时会产生标签参数,训练数据本身是没有标签的
  4. 聚类算法的评估通过轮廓系数来判断,范围[-1,1],靠近1为合理

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

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

相关文章

宿舍|基于SprinBoot+vue的宿舍管理系统(源码+数据库+文档)

宿舍管理系统 基于SprinBootvue的私人诊所管理系统 一、前言 二、系统设计 三、系统功能设计 系统功能实现 后台模块实现 管理员功能实现 学生功能实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍&…

10 个最佳网络爬虫工具和软件,零基础入门到精通,收藏这一篇就够了

据 Strait Research 称,数据提取的需求正在不断增加,预计到 2031 年将达到 18 亿美元。 使用最好的网络爬行工具启动您的数据提取项目,并告别烦人的爬行头痛。我们研究和测试了数百种免费和付费软件,然后为您提出了十种最佳网络爬…

重大内幕!揭秘数据“零丢失”,全靠它

2017年,某运营商设备扩容,误删80万用户数据… 2020年初疫情期间,某电商公司恶意删库事件,导致业务停机3天,公司赔付1.5亿元人民币 “链家程序员删库”事件,恶意删除公司 9TB 数据,造成公司财务…

LeetCode题练习与总结:单词搜索Ⅱ--212

一、题目描述 给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words, 返回所有二维网格上的单词 。 单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻…

使用 scikit-learn 实战感知机算法

一 引言 感知机(Perceptron)是最早的人工神经网络模型之一,由 Frank Rosenblatt 在 1957 年提出。虽然它相对简单,但在处理线性可分问题时却非常有效。本文将介绍如何使用 Python 的 scikit-learn 库来实现感知机,并通…

SpringBoot SSM vue在线作业考试系统

SpringBoot SSM vue在线作业考试系统 首页 图片轮播 作业信息 通知公告 登录注册 留言板 个人中心 我的收藏 后台管理 登录注册 个人中心 教师信息管理 学生信息管理 学院信息管理 专业信息管理 班级信息管理 作业信息管理 作业提交管理 通知公告管理 试卷管理 试题管理 系统…

2024最新最全:网络安全人士【必备的30个安全工具】

1.Wireshark Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是截取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。 2.Metasploit Meta…

Qt窗口 菜单栏 QMenuBar和的使用及说明

目录 1. 创建QT工程2. Qt5中添加资源文件3. 在Qt图形化界面创建菜单栏各组件4. 为菜单栏添加的选项增加图标5. 将菜单栏增加的功能拖动到工具栏6. 点击运行按钮查看运行结果7. 为菜单栏和工具栏增加的按钮添加相应的槽函数 1. 创建QT工程 打开Qt Creator软件,选择菜…

卧室无主灯照明布局:打造温馨舒适的私密空间

在追求温馨舒适的居家环境中,卧室作为休憩与放松的私密空间,其照明设计显得尤为重要。无主灯设计以其灵活多变、氛围营造独特的特点,正逐渐成为卧室照明的热门选择。那么,如何在卧室中实现无主灯的最佳布局呢?今天&…

【Python实战因果推断】73_图因果模型8

目录 Adjusting for Selection Bias Conditioning on a Mediator Adjusting for Selection Bias 不幸的是,纠正选择偏倚绝非易事。在我们一直在讨论的例子中,即使有随机对照试验,ATE也无法识别,仅仅是因为你无法在对那些回应了…

【精选】基于Django开发的静思阁自习预约管理系统(全网最新项目,独一无二)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

视频结构化从入门到精通——视频结构化技术应用难点

视频结构化技术应用难点 随着视频数据在智能安防、智能交通、零售分析等领域的广泛应用,视频结构化技术成为了提取视频信息的关键。然而,在实际应用中,这项技术面临着诸多挑战。本文将深入探讨这些难点,并提供可能的解决方案和未…

saas收银系统源码(附部分代码截图)

随着时代不断发展,很多连锁品牌不断涌现,门店数量也日益增多,但连锁品牌在选收银系统时,如果选择传统的SaaS模式合作,按门店数量、按功能模块收取服务费,门店数量如果多,每年也会是一笔不小的开…

SQL进阶技巧:近N指标如何精确计算并扩充?

目录 0 场景描述 1 数据准备 2 问题分析 3 小结 0 场景描述 假设表price 有三个字段 用户: user_id 日期:dt 订单金额 price,求每个用户的近N天的消费金额 近N指标的种类多,且日期跨度近期密,远期大。表price : 结果: 近N:rds(recent_days) dt user_id rds…

8月31日微语报,星期六,农历七月廿八

8月31日微语报,星期六,农历七月廿八,周末愉快! 一份微语报,众览天下事! 1、川渝地区正经历同期罕见高温,与高压天气系统和地形有关。 2、全国超六成GDP增量产自59城,深圳超京沪居…

缓存:浅谈双写导致的数据一致性问题

从理论上来说,给缓存设置过期时间,是保证最终一致性的解决方案。这种方案下,我们对存入缓存的数据设置过期时间,所有的写操作以数据库为准,对缓存操作只是尽最大努力更新即可。也就是说如果数据库写成功,缓…

爬虫入门urllib 和 request (一)

前言 在开始进行爬虫的知识之前,我们需要明白web网页是怎么工作的?浏览器工具是怎么使用的?反爬虫的手段手段是那些? 一.web请求全过程解析 我们浏览器在输入完网址到我们看到网页的整体内容, 这个过程中究竟发生了些什么? 我…

JavaEE 第21节 UDP数据报结构剖析

目录 前言报文结构1、源端口号&目的端口号2、UDP长度3、校验和概念校验和计算方法 前言 本篇文章会围绕UDP报文的结构,对此协议展开详细的讲解,比如报文中每个字段的作用、以及填写方式。 阅读完这篇文章,你会对UDP数据报结构有个透彻的…

不知道电脑驱动软件哪个好,试试这几款免费不限速的驱动安装软件

每一台电脑都需要安装相关的驱动才能保证设备的正常运行,然而,很多用户搜索下载的驱动安装软件不是捆绑各类软件就是限速下载或者需要开通会员。下面小编就来和大家分享几款免费且不限速的驱动安装软件,帮助大家找到最适合自己的驱动管理工具…

idea使用maven

文章目录 IDEA集成Maven配置Maven环境 全局配置:创建Maven项目POM配置详解 IDEA集成Maven 我们要想在IDEA中使用Maven进行项目构建,就需要在IDEA中集成Maven 配置Maven环境 当前工程设置 1、选择 IDEA中 File > Settings > Build,Execution,Dep…