DBSCAN聚类算法的Python可视化

2023-10-31

DBSCAN全称为“Density-Based Spatial Clustering of Applications with Noise”。我们可以利用sklearn在python中实现DBSCAN。

首先,import相关的Library。

import numpy as np
import pandas as pd
import math
import matplotlib.pyplot as plt
import matplotlib
from sklearn.cluster import DBSCAN
from sklearn.neighbors import NearestNeighbors

我们首先定义一个function来创建我们需要的数据集,数据集的dimension为2。下图为我们将要创建的数据集的可视化。这个数据集由三个圆圈组成。在我们定义的function中,r代表半径,n代表点的数量。

在这里插入图片描述

np.random.seed(42)
def PointsInCircum(r,n=100):
    return [(math.cos(2*math.pi/n*x)*r+np.random.normal(-30,30),math.sin(2*math.pi/n*x)*r+np.random.normal(-30,30)) for x in range(1,n+1)]

我们把创建的三个圆圈数据放在各自的dataframe里面,再制造一个noise数据集用来测试DBSCAN。

df1=pd.DataFrame(PointsInCircum(500,1000))
df2=pd.DataFrame(PointsInCircum(300,700))
df3=pd.DataFrame(PointsInCircum(100,300))
# Adding noise to the dataset
df4=pd.DataFrame([(np.random.randint(-600,600),np.random.randint(-600,600)) for i in range(300)])

将四个dataframe合并成一个dataframe,再进行可视化。

df = pd.concat([df1,df2])
df = pd.concat([df,df3])
df = pd.concat([df,df4])

plt.figure(figsize=(10,10))
plt.scatter(df[0],df[1],s=15,color='grey')
plt.title('Dataset',fontsize=20)
plt.xlabel('Feature 1',fontsize=14)
plt.ylabel('Feature 2',fontsize=14)
plt.show()

接着,我们利用从sklearn中import的DBSCAN。将dataframe输入DBSCAN,然后在原来的dataframe中添加一个column记录DBSCAN输出的labels,并以这些labels作为color map进行可视化。

dbscan=DBSCAN()
dbscan.fit(df[[0,1]])

df['DBSCAN_labels']=dbscan.labels_ 

# Plotting resulting clusters
plt.figure(figsize=(10,10))
colors=['purple','red','blue','green']
plt.scatter(df[0],df[1],c=df['DBSCAN_labels'],cmap=matplotlib.colors.ListedColormap(colors),s=15)
plt.title('DBSCAN Clustering',fontsize=20)
plt.xlabel('Feature 1',fontsize=14)
plt.ylabel('Feature 2',fontsize=14)
plt.show()

可视化的结果如下图:
在这里插入图片描述
我们看到整个图都是紫色,证明cluster的半径epsilon太小,DBSCAN把所有的点都当成noise了。我们可以利用KNN对epsilon进行优化。

neigh = NearestNeighbors(n_neighbors=2)
nbrs = neigh.fit(df[[0,1]])
distances, indices = nbrs.kneighbors(df[[0,1]])

# Plotting K-distance Graph
distances = np.sort(distances, axis=0)
distances = distances[:,1]
plt.figure(figsize=(20,10))
plt.plot(distances)
plt.title('K-distance Graph',fontsize=20)
plt.xlabel('Data Points sorted by distance',fontsize=14)
plt.ylabel('Epsilon',fontsize=14)
plt.show()

在这里插入图片描述
这个图中,曲线斜率最大的位置对应epsilon等于30。重新修改DBSCAN,并把minPoints设定为6。

dbscan_opt=DBSCAN(eps=30,min_samples=6)
dbscan_opt.fit(df[[0,1]])

df['DBSCAN_opt_labels']=dbscan_opt.labels_

# Plotting the resulting clusters
plt.figure(figsize=(10,10))
plt.scatter(df[0],df[1],c=df['DBSCAN_opt_labels'],cmap=matplotlib.colors.ListedColormap(colors),s=15)
plt.title('DBSCAN Clustering',fontsize=20)
plt.xlabel('Feature 1',fontsize=14)
plt.ylabel('Feature 2',fontsize=14)
plt.show()

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DBSCAN聚类算法的Python可视化 的相关文章

  • 无法在我的 Django 项目中使用 Sphinx 生成自动文档

    我正在向我的 Django 项目添加文档 github链接 https github com augustakingfoundation queryjane app 该项目是开源的 使用sphinx 但是当尝试生成python文件的auto
  • 如何检索分配给 Django 中的组的所有权限

    我正在执行一项任务来检索分配给 Django 中的组的一组权限 我可以使用以下代码获取创建的组 但无法使用它来获取分配给它们的权限 from django contrib auth models import Group Permissio
  • Django 查询:“datetime + delta”作为表达式

    好吧 我的问题如下 假设我有下一个模型 这是一个简单的情况 class Period models Model name CharField field specs here start date DateTimeField field s
  • 如何将脚本作为 pytest 测试运行

    假设我有一个用简单脚本表示的测试assert 陈述 请参阅背景了解原因 例如 import foo assert foo 3 4 我如何以一种好的方式将该脚本包含在我的 pytest 测试套件中 我尝试了两种有效但不太好的方法 一种方法是将
  • 如何在动态执行的代码字符串中使用inspect.getsource?

    如果我在文件中有这段代码 import inspect def sample p1 print p1 return 1 print inspect getsource sample 当我运行脚本时 它按预期工作 在最后一行 源代码sampl
  • 如何调试 numpy 掩码

    这个问题与this one https stackoverflow com q 73672739 11004423 我有一个正在尝试矢量化的函数 这是原来的函数 def aspect good angle float planet1 goo
  • 样本()和r样本()有什么区别?

    当我从 PyTorch 中的发行版中采样时 两者sample and rsample似乎给出了类似的结果 import torch seaborn as sns x torch distributions Normal torch tens
  • Python sys.modules 包含尚未导入的模块

    我试图了解加载的模块与导入的模块之间的区别 如果有的话 我正在使用 Python 2 7 3 并且只是从命令行运行 Python 如果我执行 import sys sys modules 我得到一个列表 其中包括os 例如 文档说sys m
  • dask apply:AttributeError:“DataFrame”对象没有属性“name”

    我有一个参数数据框 并对每一行应用一个函数 该函数本质上是几个 sql queries 和对结果的简单计算 我正在尝试利用 Dask 的多处理 同时保持结构和界面 下面的例子有效并且确实有显着的提升 def get metrics row
  • 同一台机器上有多个Python版本?

    Python 网站上是否有关于如何在 Linux 上的同一台计算机上安装和运行多个版本的 Python 的官方文档 我可以找到无数的博客文章和答案 但我想知道是否有 标准 官方方法可以做到这一点 或者这一切都取决于操作系统 我认为它是完全独
  • Python:“直接”调用方法是否实例化对象?

    我是 Python 新手 在对我的对象进行单元测试时 我注意到一些 奇怪 的东西 class Ape object def init self print ooook def say self s print s def main Ape
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 更改用作函数全局作用域的字典

    我想做一个 purePython 的装饰器 其中一部分是能够有选择地禁止访问函数的全局范围 有没有一种方法可以以编程方式更改哪个字典事物充当函数的全局 外部作用域 因此 例如在下面我希望能够拦截对f in h并抛出错误 但我想允许访问g因为
  • RuntimeError(f"目录 '{directory}' 不存在") RuntimeError: 目录 'app/static' 不存在

    当我运行 server py 文件时出现错误 File C Users nawin AppData Local Programs Python Python38 lib site packages starlette staticfiles
  • 在 for 循环中访问 itertools 产品的元素

    我有一个列表列表 是附加 itertools 产品的一些其他结果的结果 我想要的是能够使用 for 循环访问列表列表中列表的每个元素 但我无法访问所有元素 我只能访问最后一个列表的元素 结果是一个非常巨大的列表列表 例如 1 2 4 3 6
  • 通过新数据更新绘图,而不是在 Jupyter 笔记本中制作新绘图

    我有一些问题 希望你能帮我解决 我需要使用下拉小部件创建交互式绘图 我可以在其中选择并绘制感兴趣的数据 我通过以下方式做到这一点 import plotly graph objects as go import ipywidgets as
  • Python matplotlib:将轴标签/图例从粗体更改为常规粗细

    我正在尝试制作一些出版质量的图 但遇到了一个小问题 默认情况下 matplotlib 轴标签和图例条目的权重似乎比轴刻度线重 是否有办法强制轴标签 图例条目与刻度线的重量相同 import matplotlib pyplot as plt
  • 使用 Numpy 进行多维批量图像卷积

    在图像处理和分类网络中 一个常见的任务是输入图像与一些固定滤波器的卷积或互相关 例如 在卷积神经网络 CNN 中 这是一种极其常见的操作 我已将通用版本任务减少为 Given 一批 N 个图像 N H W D 和一组 K 个滤镜 K H W
  • 在 python 中使用高精度时间戳

    嘿 我正在使用 python 处理日期时间 我想知道解析这个时间戳的最佳方法是什么 时间戳是ISO标准 这里是一个例子 2010 06 19T08 17 14 078685237Z 现在到目前为止我已经使用过 time datetime d
  • python 日志记录替代方案 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 蟒蛇记录模块 http docs python org library logging html使用起来

随机推荐

  • C++:构造、析构、引用与拷贝构造

    构造函数 类的构造函数是类的一种特殊的成员函数 它会在每次创建类的新对象时执行 类的数据成员多为私有的 要对它们进初始化 必须用一个公有函数来进行 同时这个函数应该在且仅在定义对象时自动执行一次 这个函数就是构造函数 它由系统自动调动 用户
  • 一个sql很多个not like的简化语句 (not like 多个值的简化语句)(原创)

    我 SELECT FROM table WHERE zongbu NOT REGEXP 北京 大连 鞍山 天津 香港 沈阳 我 SELECT FROM cpu bidding where bid project name not REGEX
  • Java面试不通过?RabbitMQ你熟悉了吗?

    1 rabbitmq 的使用场景有哪些 跨系统的异步通信 所有需要异步交互的地方都可以使用消息队列 就像我们除了打电话 同步 以外 还需要发短信 发电子邮件 异步 的通讯方式 多个应用之间的耦合 由于消息是平台无关和语言无关的 而且语义上也
  • [sitemap 索引情况提示] 根据 sitemap 的规则[0],当前页面 [pages/index/index] 将被索引

    sitemap 索引情况提示 根据 sitemap 的规则 0 当前页面 pages index index 将被索引 一 报错信息 总结 一 报错信息 代码如下 示例 sitemap 索引情况提示 根据 sitemap 的规则 0 当前页
  • C++ 内存池 -- C++ Memory Pool

    本文翻译版本出自 http blog csdn net 060 archive 2006 10 08 1326025 aspx 原文作者 DanDanger2000 原文链接 http www codeproject com cpp Mem
  • 以太网学习(2)-- 网络协议简介

    目录 一 协议简介 二 协议间报文封装与拆封 三 LWIP简介 四 Lwip文件说明 4 1 如何获取LWIP源码文件 4 2 LWIP文件说明 lwip目录 src目录 core目录 4 3 查看lwip的说明文档 五 LWIP的三种编程
  • Python学习小案例-时间模块

    python学习小案例 时间模块 1 使用python打印当前的时间 方法一 方法二 2 计算两个日期之间的相差天数 比如 我们可以用这个代码计算我们出生到现在一共活了多少天 也可以计算情侣之间在一起了多少天 在这里的输入的格式位 xxxx
  • 【gradle】Android项目中gradle执行流程

    gradle文件执行流程 做过Android开发的同学都知道 Android项目中存在三个gradle文件 那你是否知道他们的执行流程呢 请看下面这张图 为了验证结论 的正确性 我们采用输出字符串的验证方式 输出结果如下 自定义gradle
  • 查询链接服务器信息,SQL Server链接服务器

    SQL Server链接服务器 SQL Server 中存在可以链接到其他服务器的选项 一般情况下是用来与别的 SQL Server 数据库相连接 但是有时候也可以与一个Microsoft Access数据库 相连接 这样的操作是通过链接服
  • 了解如何通过Python使用SQLite数据库

    SQLite is a very easy to use database engine included with Python SQLite is open source and is a great database for smal
  • 集成项目中,拿什么保证安全感?

    在一些大型集成项目中 经常要面临着将企业的十几二十几个信息化系统进行整合 数据进行共享 因为各个企业的信息化程度不同 所以项目实施起来的难易程度和工作量也大不相同 在一些项目中或多或少会出现拖期的现象 一些客户为此会经常质疑实施方的专业性
  • Seaborn系列教程(3)

    seaborn lineplot 折线图 解读 注意 数据一定是通过DataFrame中传送的 函数原型 seaborn lineplot x None y None hue None size None style None data N
  • I-D-E-A中maven的常用指令

    Maven库 http repo2 maven org maven2 Maven依赖查询 http mvnrepository com Maven常用命令 1 创建Maven的普通java项目 mvn archetype create Dg
  • centOS 7安装配置docker

    step 1 安装必要的一些系统工具 sudo yum install y yum utils device mapper persistent data lvm2 Step 2 添加软件源信息 sudo yum config manage
  • mysql 存储过程 set autocommit_SET autocommit = 1和mysql中的START TRANSACTION之间...

    了解数据库的事务 自动提交 显式和隐式 处理可以使您不必从备份还原数据 事务控制数据操作语句以确保它们是原子的 原子 意味着交易要么发生 要么不发生 向数据库发出事务完成信号的唯一方法是使用COMMIT或ROLLBACK语句 根据ANSI
  • flutter rabbitmq

    这样的rabbitmq可以实现和服务器交互 但是由于app登录人不确定 意义不大 import package dart amqp dart amqp dart dart amqp 0 2 1 Future
  • STM32CUBEMX_创建时间片轮询架构的软件框架

    STM32CUBEMX 创建时间片轮询架构的软件框架 说明 1 这种架构避免在更新STM32CUBEMX配置后把用户代码清除掉 2 利用这种时间片的架构可以使得代码架构清晰易于维护 创建步骤 1 使用STM32CUBEMX创建基础工程 2
  • WSL2最佳实践,淘汰难用的Xshell和Finalshell

    1 安装WSL2 1 1 先决条件 确认Windows系统版本 开启虚拟化功能 1 1 1 确认Windows系统版本 必须运行 Windows 10 版本 2004 及更高版本 内部版本 19041 及更高版本 或 Windows 11
  • python的多分支结构、三目运算符、for循环、while循环、break和continue学习

    一 多分支结构 1 if单分支结构 意思是 如果xxx就xxx 语句结构 if 条件语句 代码段 2 if双分支结构 意思是 如果xxx就xxx否则xxx 语句结构 if 条件语句 代码段1 else 代码段2 3 if多分支结构 根据不同
  • DBSCAN聚类算法的Python可视化

    DBSCAN全称为 Density Based Spatial Clustering of Applications with Noise 我们可以利用sklearn在python中实现DBSCAN 首先 import相关的Library