【深度学习 | 数据可视化】 视觉展示分类边界: Perceptron模型可视化iris数据集的决策边界

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

在这里插入图片描述

该文章收录专栏
[✨— 《深入解析机器学习:从原理到应用的全面指南》 —✨]

决策边界可视化

Perceptron

在训练好高精度的模型,我们可以通过有效的可视化直观看到分类效果,相比于混淆矩阵等分类指标更加直观。如下示例就可以看出iris数据集的Sepal (花萼)相比 Petal (花瓣)更难分类

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Perceptron
# 加载鸢尾花数据集 
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(data.data[:,2:], data.target, test_size=0.2)

# 创建并训练感知器模型
perceptron = Perceptron()
perceptron.fit(X_train, y_train)

# 绘制散点图(每个类别用不同颜色表示)
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train) # just draw the length and width of sepal ,
# and the c paremeter get the array will draw different  color in different digital
plt.xlabel('Petal Length')
plt.ylabel('Petal Width')

# 添加决策边界到图中
x_min, x_max = X_train[:, 0].min() - 1, X_train[:, 0].max() + 1
y_min, y_max = X_train[:, 1].min() - 1, X_train[:, 1].max() + 1

xx, yy = np.meshgrid(np.arange(x_min, x_max), np.arange(y_min,y_max)) # depend on the two x and y lenth decide the array shape return the x and y axis np-array with interval 1 
# both have the same shape
# print(np.arange(x_min, x_max))
# print(np.arange(y_min,y_max))
# print(xx)
# print(xx.ravel())
# print(yy)
# print(yy.ravel())
Z = perceptron.predict(np.c_[xx.ravel(), yy.ravel()]) # draw the decision boundary (predict the per coordinate pair )
# print(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape) # replace to the every grid
print(Z)
plt.contourf(xx ,yy ,Z,alpha=0.3)
plt.show()
accuary = sum(perceptron.predict(X_test) == y_test)/len(y_test) 
print(accuary)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vtt9903J-1692410092565)(data visualization.assets/image-20230819093519419.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NP4qVAMU-1692410092566)(data visualization.assets/image-20230819093953006.png)]

对应的Prediction grid (可以看到反过来就是绘制等高线对应的图片):

[[0 1 1 1 1 1 1 1]
 [0 0 1 1 1 1 1 1]
 [0 0 0 1 1 1 1 1]
 [2 2 2 2 2 2 2 1]
 [2 2 2 2 2 2 2 2]]

详解使用函数:

np.meshgrid()

np.meshgrid()函数用于生成一个二维网格,它以两个一维数组作为参数,分别表示 x 轴和 y 轴上的坐标点。该函数返回两个二维数组,这些数组中的每个元素都代表了在坐标平面上某一点的 x 和 y 坐标。

让我们来详细解释一下np.meshgrid()函数的具体用法:

xx, yy = np.meshgrid(np.arange(x_min, x_max), np.arange(y_min,y_max))
  • np.arange(x_min, x_max):这是一个 NumPy 函数,用于创建一个从 x_minx_max - 1 的连续整数序列。它将作为参数传递给 np.meshgrid() 函数,并指定了在 x 轴方向上生成网格点所需的范围。

  • np.arange(y_min,y_max):类似地同上

  • xx, yy = np.meshgrid(...):通过调用np.meshgrid(np.arange(x_min, x_max), np.arange(y_min,y_max))可以得到 xx 和 yy 这两个变量。其中 xx 是一个与 y 方向长度相同、横轴值变化而纵轴不变(即 y 方向不变)的二维数组;yy 是一个与 x 方向长度相同、纵轴值变化而横轴不变(即 x 方向不变)的二维数组。

这个函数对于在整个坐标空间上进行预测和可视化非常有用,因为它生成了一个包含所有可能组合的坐标点网格。

np.ravel() & np.c_

np.ravel()函数用于将多维数组展平为一维数组。它会按照 C 风格(行优先)的顺序来展开数组。

np.c_()用于按列连接两个或多个数组。它可以将一维数组沿着列方向进行拼接生成一个新的二维数组

plt.contourf()

plt.contourf()用于绘制等高线填充图。它可以根据数据的值来为不同区域着色,并在图表上显示出这些颜色区域之间的边界。

让我们详细解释一下plt.contourf()函数的具体用法:

plt.contourf(X, Y, Z)
  • X:表示 x 坐标点的二维数组或网格矩阵。

  • Y:表示 y 坐标点的二维数组或网格矩阵。

  • Z:表示对应于 (X, Y) 网格点位置处某种属性(例如,高度、温度等)的数值。

通过传递以上参数给plt.contourf()函数,我们可以生成一个由等高线填充区域组成的图表。其中每个填充区域都代表了相应坐标点处属性数值所在范围内部分。

此外,您还可以使用其他参数来自定义等高线填充图:

  • levels: 通过设置 levels 参数来指定要显示哪些特定数值范围内部分,默认情况下会自动选择合适数量和范围。

  • colors: 可以使用 colors 参数来指定所使用颜色映射(colormap),也可以直接传递一个颜色列表作为参数进行手动设置。

通过使用plt.contourf()函数,您可以以视觉方式展示二维数据的分布情况,并更好地理解和呈现数据。

总结

总体而言,整个可视化原理也比较清晰明了。大概流程如下:

  1. 根据对应的数据数组特征的Min和Max确定对应的数据范围(Arrange)
  2. 根据数据范围通过meshgrip生成对应表格二维数组(返回每一个点的x和y的值(shape (len(x),len(y))
  3. 对数据进行铺平操作(np.ravel())和拼接成数组(np.c_)对作为特征数据进行预测网格的每一个点。
  4. 通过plt.contourf对网格点的每一个预测结果作为其属性画不同颜色等高线实现决策边界的绘制。🎉

在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞
					🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩
					 	 🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Three.js的WebXR渲染入门

1、Three.js 渲染管线快速概览 我不会花太多时间讨论 Three.JS 渲染管道的工作原理,因为它在互联网上有详细记录(例如,此链接)。 我将在下图中列出基础知识,以便更容易理解各个部分的去向。 2、WebXR 设备 API 入门 在我们深入了解 WebXR API 本身之前,您应该知道 WebX…

AutoSAR系列讲解(深入篇)13.7-Mcal Adc配置(上)

目录 一、AdcGeneral 二、AdcSafety 三、AdcConfigSet 在之前的章节中,咱们在Port的配置中讲解了工具的初步使用与一些技巧;在Dio的配置中讲解了生成的代码的内容;在mcu的配置里讲解了外部一些 第三方简便工具的使用。这一次咱们配合ADC模块,就详细的讲讲每个配置项的作…

STM32F407使用Helix库软解MP3并通过DAC输出,最精简的STM32+SD卡实现MP3播放器

只用STM32单片机SD卡耳机插座,实现播放MP3播放器! 看过很多STM32软解MP3的方案,即不通过类似VS1053之类的解码器芯片,直接用STM32和软件库解码MP3文件,通常使用了labmad或者Helix解码库实现,Helix相对labm…

Kubernetes网络模型

Kubernetes 用来在集群上运行分布式系统。分布式系统的本质使得网络组件在 Kubernetes 中是至关重要也不可或缺的。理解 Kubernetes 的网络模型可以帮助你更好的在 Kubernetes 上运行、监控、诊断你的应用程序。 网络是一个很宽泛的领域,其中有许多成熟的技术。对于…

学习总结(TAT)

项目写完了,来写一个总的总结啦: 1.后期错误 Connection,Statement,Prestatement,ResultSet都要记得关闭接口;(一定要按顺序关闭); 在写群聊的时候写数据库名的时候不要…

Spring项目使用Redis限制用户登录失败的次数以及暂时锁定用户登录权限

文章目录 背景环境代码实现0. 项目结构图(供参考)1. 数据库中的表(供参考)2. 依赖(pom.xml)3. 配置文件(application.yml)4. 配置文件(application-dev.yml)5…

Windows10上VS2022单步调试FFmpeg 4.2源码

之前在 https://blog.csdn.net/fengbingchun/article/details/103735560 介绍过通过VS2017单步调试FFmpeg源码的方法,这里在Windows10上通过VS2022单步调试FFmpeg 4.2的方法:基于GitHub上ShiftMediaProject/FFmpeg项目,下面对编译过程进行说明…

.netcore grpc身份验证和授权

一、鉴权和授权(grpc专栏结束后会开启鉴权授权专栏欢迎大家关注) 权限认证这里使用IdentityServer4配合JWT进行认证通过AddAuthentication和AddAuthorization方法进行鉴权授权注入;通过UseAuthentication和UseAuthorization启用鉴权授权增加…

Vulnhub系列靶机 Hackadmeic.RTB1

系列:Hackademic(此系列共2台) 难度:初级 信息收集 主机发现 netdiscover -r 192.168.80.0/24端口扫描 nmap -A -p- 192.168.80.143访问80端口 使用指纹识别插件查看是WordPress 根据首页显示的内容,点击target 点击…

pytorch 42 C#使用onnxruntime部署内置nms的yolov8模型

在进行目标检测部署时,通常需要自行编码实现对模型预测结果的解码及与预测结果的nms操作。所幸现在的各种部署框架对算子的支持更为灵活,可以在模型内实现预测结果的解码,但仍然需要自行编码实现对预测结果的nms操作。其实在onnx opset===11版本以后,其已支持将nms操作嵌入…

嵌入式Linux开发实操(八):UART串口开发

串口可以说是非常好用的一个接口,它同USB、CAN、I2C、SPI等接口一样,为SOC/MCU构建了丰富的接口功能。那么在嵌入式linux中又是如何搭建和使用UART接口的呢? 一、Console接口即ttyS0 ttyS0通常做为u-boot(bootloader的一种,像是Windows的BIOS),它需要一个交互界面,一般…

AutoSAR配置与实践(基础篇)3.3 BSW的通信功能

传送门 -> AUTOSAR配置与实践总目录 AutoSAR配置与实践(基础篇)3.3 BSW的通信功能 一、收发过程概览1.1 发送过程概览1.2 接收过程概览 二、BSW的通信功能模块组成三、收发过程解析3.1 发送过程3.2 发送后的结果确认3.3 接收过程 一、收发过程概览 1…

「快学Docker」探索Docker的优势和多样化用途

「快学Docker」探索Docker的优势和多样化用途 Docker的优势Docker的多样化用途总结 Docker的优势 环境一致性:传统软件开发和部署中,环境配置常常是一个棘手的问题,不同环境之间可能存在差异,导致问题难以定位和解决。Docker通过…

golang云原生项目之:etcd服务注册与发现

服务注册与发现:ETCD 1直接调包 kitex-contrib: 上面有实现的案例,直接cv。下面是具体的理解 2 相关概念 EtcdResolver: etcd resolver是一种DNS解析器,用于将域名转换为etcd集群中的具体地址,以便应用程序可以与et…

云安全与多云环境管理:讨论在云计算和多云环境下如何保护数据、应用程序和基础设施的安全

随着云计算和多云环境的广泛应用,企业正面临着数据、应用程序和基础设施安全的新挑战。在这个数字化时代,保护敏感信息和业务运作的连续性变得尤为重要。本文将深入探讨在云计算和多云环境下如何有效地保护数据、应用程序和基础设施的安全。 章节一&…

[保研/考研机试] KY43 全排列 北京大学复试上机题 C++实现

题目链接&#xff1a; 全排列https://www.nowcoder.com/share/jump/437195121692001512368 描述 给定一个由不同的小写字母组成的字符串&#xff0c;输出这个字符串的所有全排列。 我们假设对于小写字母有a < b < ... < y < z&#xff0c;而且给定的字符串中的字…

服务器安装centos7踩坑

1、制作启动工具 下载iso https://developer.aliyun.com/mirror/?spma2c6h.25603864.0.0.20387abbo2RFbn http://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/?spma2c6h.25603864.0.0.1995f5ad4AhJaW下载 UltraISO https://cn.ultraiso.net/插入u盘启动 到了如图所示页面…

线程基础和CompletableFuture异步编排

目录 一、线程回顾 1、初始化线程的 4 种方式 2、线程池的七大参数 3、常见的 4 种线程池 4、开发中为什么使用线程池 二、CompletableFuture 异步编排 1、创建异步对象 2、计算完成时回调方法 3、handle 方法 4、线程串行化方法 5、两任务组合 - 都要完成 6、两任务…

【ARM Linux 系统稳定性分析入门及渐进12 -- GDB内存查看命令 “x“(examine)】

文章目录 gdb 内存查看命令 examine 上篇文章&#xff1a;ARM Linux 系统稳定性分析入门及渐进11 – GDB( print 和 p 的使用| 和 &#xff1a;&#xff1a;的使用|ptype|{&#xff1c;type&#xff1e;} &#xff1c;addr&#xff1e; ) gdb 内存查看命令 examine examine是…

redis-数据类型及样例

一.string 类型数据的基本操作 1.添加/修改数据 set key value2.获取数据 get key3.删除数据 del key4.添加/修改多个数据 mset key1 value1 key2 value25.获取多个数据 mget key1 key2二.list类型的基本操作 数据存储需求&#xff1a;存储多个数据&#xff0c;并对数据…