DBSCAN聚类的python实现

news2024/9/29 21:30:21

文章目录

  • 介绍
    • DBSCAN()函数介绍
    • 实例
  • 参数选择
    • 实例
      • 整理数据
      • 选择eps和min_samples
      • 建立模型

作者:张双双

介绍

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,python中的sklearn.cluster库可以实现DBSCAN聚类。

DBSCAN()函数介绍

DBSCAN(eps=0.5,
	min_samples=5,
	metric='euclidean',
	mtric_params=None,
	algorithm='auto',
	leaf_size=30,
	p=None,
	n_jobs=1)

参数介绍

  • 1.eps:邻域半径;
  • 2.min_samples:一个核心对象应该拥有的最少样本数;
  • 3.metric:计算样本之间距离的公式,默认metric=‘euclidean’,即欧式距离;
  • 4.algorithm:用来找最近邻样本点算法{‘auto’,‘ball_tree’,‘ke_tree’}
  • 5.leaf_size:kd_tree或ball_tree中的叶子节点数;决定了搜索快慢;

实例

import matplotlib.pyplot as plt 
import numpy as np 
from sklearn import datasets 
from sklearn.cluster import DBSCAN

iris = datasets.load_iris() 
X = iris.data[:, :4] # #表示我们只取特征空间中的4个维度

estimator = DBSCAN(eps=0.4,min_samples=9) # 构造聚类器
estimator.fit(X) # 聚类
label_pred2 = estimator.labels_ # 获取聚类标签


# 绘制结果
x0 = X[label_pred2 == 0]
x1 = X[label_pred2 == 1]
x2 = X[label_pred2 == 2]
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label0') 
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1') 
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label2') 
plt.xlabel('sepal length') 
plt.ylabel('sepal width') 
plt.legend(loc=2) 
plt.show()

在这里插入图片描述

参数选择

DBSCAN()中有两个参数非常重要,即,邻域半径eps和核心点邻域内的最少样本数min_samples。
对于eps的选取我们可以利用k-distance碎石图来实现:

  • 1)选取k值,建议取k为2*维度-1。(其中维度为特征数)
  • 2) 计算并绘制k-distance图。(计算出每个点到距其第k近的点的距离,然后将这些距离从大到小排序后进行绘图。)
  • 3)找到拐点位置的距离,即为Eps的值。

min_samples的取值为上述k值加1,即:min_samples=k + 1 。

实例

整理数据

import numpy as np
from sklearn.datasets import make_moons
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN
np.random.seed(2021)

data = np.ones([1005,2])
data[:1000] = make_moons(n_samples=1000,noise=0.05,random_state=2022)[0]
data[1000:] = [[-1,-0.5],
                [-0.5,-1],
                [-1,1.5],
                [2.5,-0.5],
                [2,1.5]]
print(data.shape)
plt.scatter(data[:,0],data[:,1],color="c")
plt.show()

在这里插入图片描述

选择eps和min_samples

def select_MinPts(data,k):
    k_dist = []
    for i in range(data.shape[0]):
        dist = (((data[i] - data)**2).sum(axis=1)**0.5)
        dist.sort()
        k_dist.append(dist[k])
    return np.array(k_dist)
k = 3  # 此处k取 2*2 -1 
k_dist = select_MinPts(data,k)
k_dist.sort()
plt.plot(np.arange(k_dist.shape[0]),k_dist[::-1])

在这里插入图片描述

建立模型

dbscan_model = DBSCAN(eps=0.1,min_samples=k+1)
label = dbscan_model.fit_predict(data)

class_1 = []
class_2 = []
noise = []
for index,value in enumerate(label):
    if value == 0:
        class_1.append(index)
    elif value == 1:
        class_2.append(index)
    elif value == -1:
        noise.append(index)
plt.scatter(data[class_1,0],data[class_1,1],color="g",label="class 1")
plt.scatter(data[class_2,0],data[class_2,1],color="b",label = "class 2")
plt.scatter(data[noise,0],data[noise,1],color="r",label = "noise")
plt.legend()
plt.show()

在这里插入图片描述

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

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

相关文章

BACnet协议详解——初识BACnet架构

文章目录BACnet协议架构BACnet简化的架构简化的四层BACnet体系结构选取BACnet 网络的拓扑结构安全BACnet协议架构 国际标准化组织在制定计算机网络通讯协议标准时定义了一个模型,称为开放系统互联参考模型(OSI(ISO 7498)。模型的…

5 JMeter断言-Jmeter响应中出现乱码时

文章目录2 JMeter2.5 JMeter断言2.5.1 响应断言2.5.2 JSON断言2.5.3 断言持续时间3 使用问题3.1 jmeter响应中出现乱码时2 JMeter 2.5 JMeter断言 作用:让脚本自动化执行的过程中,能够自动的判断执行结果是否正确,需要添加断言 响应断言 J…

MobTech秒验 I 作为产品经理,你知道何时做“减法”何时做“加法”嘛?

智能手机从诞生到现在,无论是硬件还是软件都有很大幅度的提升,用户的审美和挑剔力度也不断提升。如果在一个应用中使用的不顺心或者是设计得不符合用户的使用习惯,或许他就会卸载这个应用,下载另一个同类应用。因而产品经理们在垂…

STM32 HAL I2C(IIC)通信的序列传输(restart condition)

STM32 HAL I2C(IIC)通信的序列(Seq)传输函数(restart condition) neozng1hnu.edu.cn 文章目录STM32 HAL I2C(IIC)通信的序列(Seq)传输函数(restart condition)XferOption的含义HAL源码解析实验验证阅读本文需要你对I2C协议有基本…

ceph-ansible安装指南-添加BlueStore

前言:ceph的资料真是很少,摸索一断时间,将整理的一资料和操作经验分享。本篇为干货,实操。生产环境可以借鉴使用。 知识点: 1、建议使用LVM卷管理作为Ceph底层的存储块设备,因为LVM卷可以随时扩展&#xf…

石子合并(分治+贪心+DP+前缀和)

石子合并一、题目内容二、思路分析1、状态转移方程(1)状态表示(2)状态转移2、循环设计及初始化(1)循环(2)初始化3、代码实现一、题目内容 二、思路分析 这道题也是一个很经典的DP问…

灵感来源于宇宙光束 长安汽车发布全新设计理念

12月28日,“重构想象 创领未来”2022首届长安汽车设计日正式启幕,长安汽车副总裁王孝飞发表“以创新之手、触万象之境”的主题演讲,分享了最新设计理念,正式发布长安汽车全新设计理念“纵横万象”。同时,基于这一理念打…

【Docker社区大会】WebAssembly:无需容器的 Docker——VMware技术总监 Daniel Lopez

本文授权翻译自 Wasm Labs VMware OCTO 的 blog: WebAssembly: Docker without container。这是 Wasm Labs 在 2022 年 12 月 15 日在冬季Docker Community All Hands 7 的关于 DockerWebAssembly 的演讲的文字版。 作者:Asen Alexandrov,Wa…

C#,图像二值化(08)——全局阈值优化算法及其源代码

1、全局阈值算法 基于灰度直方图的优化迭代算法之一。 Iterative Scheduler and Modified Iterative Water-Filling In the downlink, the inter-cell interference is only function of the power levels and is independent of the user scheduling decisions. This suggest…

【全网最细PAT题解】【PAT乙】1005 继续(3n+1)猜想(map和vector的运用)

题目链接 1005 继续(3n1)猜想 题目描述 1005 继续(3n1)猜想 分数 25 作者 CHEN, Yue 单位 浙江大学 卡拉兹(Callatz)猜想已经在1001中给出了描述。在这个题目里,情况稍微有些复杂。当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递…

Linux网络收包过程

一、Linux 网络收包总览 在 TCP / IP 网络分层模型里,整个协议栈被分成了物理层、链路层、网络层,传输层和应用层。物理层对应的是网卡和网线,应用层对应的是我们常见的 Nginx,FTP 等等各种应用。Linux 实现的是链路层、网络层和…

scaner从外网到内网域渗透笔记

scaner 从外网到内网域渗透 1.环境配置 1.1靶场信息 用到的虚拟机共有三个 分别是 12server-db 、12-dc 、web1 12server-db、web1 这两个可以使用桥接或者nat模式根据需求可以设置 网卡1 12-dc用的是VMnet 19 这台机子已经绑定ip 主机名ip账号和密码web1192.168.0.160we…

工具(三):Jmeter压测数据在Grafana展示

Docker 安装 InfluxDBJMeter 配置 InfluxDB数据源Grafana 配置influxdb数据源 Docker 安装 InfluxDB docker pull influxdb:1.8.6 # 拉取influxdb镜像docker run -d -p 8086:8086 --namejmeterdb influxdb:1.8.6 # 启动influxdb,并命名为jmeterdbdocker exec -it …

使用Canvas实现封装路径,添加颜色,实现渐变,3d特效

目录 1.封装路径 2.添加颜色 3.渐变特效 3.1线性渐变 3.2径向渐变 3.3径向渐变模拟3d球 图形我们已经会绘制了,但是单一的图形肯定不好看,就像html没了css一样,所以今天我们要把图形上色。 1.封装路径 new Path2D()进行封装&#x…

NAPI简介

NAPI简介 它的核心概念就是不采用中断的方式读取数据,而代之以首先采用中断唤醒数据接收的服务程序,然后 POLL 的方法来轮询数据。NAPI是综合中断方式与轮询方式的技术。 中断的好处是响应及时,如果数据量较小,则不会占用太多的…

百度发布Apollo 8.0,架构、能力双双升级

12月28日,百度举行了Apollo开放平台8.0线上发布会。会上,百度正式推出Apollo开放平台8.0,进一步夯实了平台的易用性,让开发者操作更简单易上手。同时,百度Apollo也面向外界分享了在自动驾驶教育、生态合作伙伴等方面的…

SuperMap GIS基础软件中数据库使用指南

作者:Carlo 一、支持的主流数据库类型 1、主流数据库介绍 数据库名称版本不支持的数据集类型需要配置 客户端支持工作空间支持集群模式SQLPlus2008/2012/2016/2018(仅 Windows 平台支持)视频、复合点、复合线、复合面、复合文本数据集是是是…

球王贝利去世终年 82 岁,其是世界上唯一三次夺取世界杯冠军的足球运动员,如何评价他的传奇一生?

当地时间12月29日,巴西圣保罗市阿尔伯特爱因斯坦医院发布公告称,巴西知名运动员、“球王”贝利因结肠癌引发多器官衰竭,于当天15时27分去世,终年82岁。贝利女儿凯丽纳西门托在社交媒体发文:“我们的一切都归功于你&…

VR餐厅全新思路,可以为餐饮行业带来哪些好处?

餐饮行业的寒冬即将过去,逐渐迎来了发展的好机会,趁此机遇你会怎么做呢?餐饮行业的竞争依旧激烈,也许你的餐厅占据了很好的地理位置,或者是拥有时尚有品位的装修风格,亦或者拥有美味可口的菜品,…

报表开发工具FastReport.NET的五大常见问题及解决方法

Fastreport是目前世界上主流的图表控件,具有超高性价比,以更具成本优势的价格,便能提供功能齐全的报表解决方案,连续三年蝉联全球文档创建组件和库的“ Top 50 Publishers”奖。 FastReport.NET官方版下载(qun&#x…