python之sklearn--鸢尾花数据集之数据降维(PCA主成分分析)

python之sklearn–鸢尾花数据集之数据降维(PCA主成分分析)

sklearn库:Scikit - learn(sklearn)是一个用于机器学习的开源 Python 库。它建立在 NumPy、SciPy 和 matplotlib 等其他科学计算库之上,为机器学习的常见任务提供了简单高效的工具,包括分类、回归、聚类、降维、模型选择和预处理等多种算法。

下载sklearn库:pip install scikit-learn


分模块解析


1.导入需要的模块

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import datasets
from sklearn.decomposition import PCA  #PCA:主成分分析

2.加载数据

iris = datasets.load_iris()  #加载鸢尾花数据集
x = iris.data[:,:2]   #仅考察前两个特征,即鸢尾花花萼的长宽
y = iris.target

3.计算用于绘制二维散点图时,x轴(花萼长度)和y轴(花萼宽度)的坐标范围

通过减去和加上0.5来适当扩展范围,使可视化效果更好。

x_min,x_max = x[:,0].min() - .5,x[:,0].max() + .5
y_min,y_max = x[:,1].min() - .5,x[:,1].max() + .5

4.绘制二维散点图

plt.figure(1,figsize=(6,4))  #创建编号为 1,大小为 (6, 4) 的图形
plt.clf()   #清除当前图形窗口中的内容
plt.scatter(x[:,0],x[:,1],c=y,cmap=plt.cm.Set1,edgecolors='k')   

scatter 函数用于绘制散点图,直观地展示数据点在二维空间中的分布情况通过。
X_reduced[:,0] 表示取这个数据集中每一行的第 1 列数据,作为散点图中每个点的 x 坐标;
X_reduced[:,1] 取每一行的第 2 列数据,作为 y 坐标;
c=y根据样本的类别标签来给点赋予不同的颜色(颜色映射使用plt.cm.Set1)。
cmap=plt.cm.Set1 是 matplotlib 中预定义的一种颜色映射,它能够提供一组离散的、区分度较高的颜色,适合用于区分不同类别等情况。
edgecolors=‘k’ : edgecolor 参数用于指定散点的边缘颜色,'k’表示黑色的—>‘black’

绘制二维图

plt.xlabel('Sepal length')  #x轴标签名称
plt.ylabel('Sepal wigth')   #y轴标签名称
plt.xlim(x_min,x_max)   #设置x坐标范围
plt.ylim(y_min,y_max)   #设置y坐标范围
plt.xticks(())  #去掉x坐标轴上的刻度标记
plt.yticks(())  #去掉y坐标轴上的刻度标记
  1. 进行主成分分析并绘制 3D 散点图
fig = plt.figure(2,figsize=(6,4))   
#创建编号为 2,大小为 (6, 4) 的图形
plt.clf()
#用于清除当前图形(Figure)对象中的所有内容
# ax = fig.add_subplot(1,1,1,projection = '3d') #这句代码也是可以做3D图形的
ax = Axes3D(fig,elev=-150,azim=110)

该图形窗口中创建一个 3D 坐标轴对象,并且通过elev(仰角)和azim(方位角)参数设置了视角,方便观察 3D 散点图的效果。

X_reduced = PCA(n_components=3).fit_transform(iris.data)

使用PCA类对鸢尾花数据集的所有特征(这里没有像前面二维可视化那样只取部分特征)进行主成分分析。 将数据降到 3维空间(通过n_components=3指定),得到降维后的数据集X_reduced。

ax.scatter(X_reduced[:,0],X_reduced[:,1],X_reduced[:,2],c=y,cmap=plt.cm.Set1,edgecolor='k',s=40)    #s是散点的大小
ax.set_title('First three PCA directions')  #设置标题
ax.set_xlabel('1st eigenvector')  #设置x标签--第一特征向量
ax.xaxis.set_ticklabels([])    #去掉x刻度显示
ax.set_ylabel('2nd eigenvector')  #设置y标签--第二特征向量
ax.yaxis.set_ticklabels([])    #去掉y刻度显示
ax.set_zlabel('3rd eigenvector')  #设置z标签--第三特征向量
ax.zaxis.set_ticklabels([])    #去掉z刻度显示
plt.show()   显示图片

完整代码

from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import datasets
from sklearn.decomposition import PCA 

iris = datasets.load_iris() 
x = iris.data[:,:2]   
y = iris.target

x_min,x_max = x[:,0].min() - .5,x[:,0].max() + .5
y_min,y_max = x[:,1].min() - .5,x[:,1].max() + .5

plt.figure(1,figsize=(6.4))
plt.clf()   
plt.scatter(x[:,0],x[:,1],c=y,cmap=plt.cm.Set1,edgecolors='k')   

plt.xlabel('Sepal length')
plt.ylabel('Sepal wigth')
plt.xlim(x_min,x_max)
plt.ylim(y_min,y_max)
plt.xticks(())  
plt.yticks(())

fig = plt.figure(2,figsize=(6,4))
plt.clf()

#ax = fig.add_subplot(1,1,1,projection = '3d')
ax = Axes3D(fig,elev=-150,azim=110)
plt.cla()

X_reduced = PCA(n_components=3).fit_transform(iris.data)

ax.scatter(X_reduced[:,0],X_reduced[:,1],X_reduced[:,2],c=y,cmap=plt.cm.Set1,edgecolor='k',s=40)
ax.set_title('First three PCA directions')
ax.set_xlabel('1st eigenvector')
ax.xaxis.set_ticklabels([])   
ax.set_ylabel('2nd eigenvector')
ax.yaxis.set_ticklabels([])
ax.set_zlabel('3rd eigenvector')
ax.zaxis.set_ticklabels([])
plt.show()

运行结果图
1.鸢尾花–iris二维散点图
在这里插入图片描述
1.鸢尾花–iris三维散点图

在这里插入图片描述

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

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

相关文章

音视频pts/dts

现在的视频流有两个非常重要的时间戳,pts和dts,其中pts是显示的时候用,dts在解码的时候用。 pts很好理解,按照pts的顺序以及duration不间断的display就可以了。 dts在解码的时候用,那么这句话怎么理解,解…

数据集-目标检测系列- 人与猫互动 猫 检测数据集 cat in the house >> DataBall

数据集-目标检测系列- 人与猫互动 猫 检测数据集 cat in the house >> DataBall DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 贵在坚持! 数据样例项目地址: * 相关项目 1&#xff…

ReactPress:基于pnpm的Mono Repository方案介绍

ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 ReactPress基于pnpm的Mono Repository方案介绍 ReactPress是一个使用React和Node.js构建的开源发布平台,它允许用户在支持React和MySQL数据库的服务器上设置自己的博客…

stm32如何接收舵机的控制信号(而不是控制舵机)

看到很多如何stm32用pwm信号控制舵机的文章,老生常谈了 我来写一个stm32接收pwm信号的例子 ,这个pwm信号是用来控制舵机的 背景: 我需要接收航模接收机的,用来控制舵机的pwm信号, 得到这个信号后,做其他事情. 初版代码 pwm.h#ifndef _pwm_H #define _pwm_H#include "s…

Spring Boot 3.x + OAuth 2.0:构建认证授权服务与资源服务器

Spring Boot 3.x OAuth 2.0:构建认证授权服务与资源服务器 前言 随着Spring Boot 3的发布,我们迎来了许多新特性和改进,其中包括对Spring Security和OAuth 2.0的更好支持。本文将详细介绍如何在Spring Boot 3.x版本中集成OAuth 2.0&#xf…

Photoshop(PS)——人像磨皮

1.新建一个文件,背景为白色,将图片素材放入文件中 2.利用CtrlJ 复制两个图层出来,选择第一个拷贝图层,选择滤镜---杂色---蒙尘与划痕 3.调整一下数值,大概能够模糊痘印痘坑,点击确定。 4.然后选择拷贝2图层…

Vue3 + Vite 项目引入 Typescript

文章目录 一、TypeScript简介二、TypeScript 开发环境搭建三、编译方式1. 自动编译单个文件2. 自动编译整个项目 四、配置文件1. compilerOptions基本选项严格模式相关选项(启用 strict 后自动包含这些)模块与导入相关选项 2. include 和 excludeinclude…

MySql 索引视图存储变量

要求 一: 学生表:Student(Sno,Sname,Ssex ,Sage, Sdept) 学号,姓名,性别,年龄,所在系 Sno为主键 课程表:Course(Cno,Cname) 课程号,课程名 Cno为主键 学生…

使用MaxKB搭建知识库问答系统并接入个人网站(halo)

首发地址(欢迎大家访问):使用MaxKB搭建知识库问答系统并接入个人网站 前言 从OpenAI推出ChatGPT到现在,大模型已经渗透到各行各业,大模型也逐渐趋于平民化;从最开始对其理解、生成、强大的知识积累的惊叹&…

除了电商平台,还有哪些网站适合进行数据爬取?

在数字化时代,数据的价值日益凸显,而网络爬虫技术成为获取数据的重要手段。除了电商平台,还有许多其他类型的网站适合进行数据爬取,以支持市场研究、数据分析、内容聚合等多种应用场景。本文将探讨除了电商平台外,还有…

Linux-第2集-打包压缩 zip、tar WindowsLinux互传

欢迎来到Linux第2集,这一集我会非常详细的说明如何在Linux上进行打包压缩操作,以及解压解包 还有最最重要的压缩包的网络传输 毕竟打包压缩不是目的,把文件最终传到指定位置才是目的 由于打包压缩分开讲没有意义,并且它们俩本来…

tcp 超时计时器

在 TCP(传输控制协议)中有以下四种重要的计时器: 重传计时器(Retransmission Timer) 作用:用于处理数据包丢失的情况。当发送方发送一个数据段后,就会启动重传计时器。如果在计时器超时之前没有…

go环境搭建

华子目录 下载vscode安装vscodego编译器下载go编译器安装配置go环境变量vscode安装go插件测试 下载vscode 官方:https://code.visualstudio.com/Download 安装vscode vscod安装成功 go编译器下载 官方:https://golang.google.cn/ 点击下载 go编译器安…

Minikube 上安装 Argo Workflow

文章目录 步骤 1:启动 Minikube 集群步骤 2:安装Argo Workflow步骤 3:访问UI创建流水线任务参考 前提条件: Minikube:确保你已经安装并启动了 Minikube。 kubectl:确保你已经安装并配置了 kubectl&#xff…

Stable Diffusion核心网络结构——CLIP Text Encoder

🌺系列文章推荐🌺 扩散模型系列文章正在持续的更新,更新节奏如下,先更新SD模型讲解,再更新相关的微调方法文章,敬请期待!!!(本文及其之前的文章均已更新&…

集群聊天服务器(13)redis环境安装和发布订阅命令

目录 环境安装订阅redis发布-订阅的客户端编程环境配置客户端编程 功能测试 环境安装 sudo apt-get install redis-server 先启动redis服务 /etc/init.d/redis-server start默认在6379端口上 redis是存键值对的,还可以存链表、数组等等复杂数据结构 而且数据是在…

git日志查询和导出

背景 查看git的提交记录并下载 操作 1、找到你idea代码的路径,然后 git bash here打开窗口 2、下载所有的日志记录 git log > commit.log3、下载特定日期范围内记录 git log --since"2024-09-01" --until"2024-11-18" 你的分支 > c…

Go中数组和切片

数组和切片 【1】、数组 1、什么是数组 一组数 数组需要是相同类型的数据的集合 数组是需要定义大小的 数组一旦定义了大小是不可以改变的。 package mainimport "fmt"// 数组 // 数组和其他变量定义没什么区别,唯一的就是这个是一组数,需要…

three.js加载GLTF模型

要在three.js中正确加载和显示GLTF模型,需要遵循一系列步骤来确保模型的纹理和材质被正确应用。以下是加载GLTF模型的基本步骤: 引入必要的three.js模块: 引入了GLTFLoader模块,用来加载GLTF格式模型的类。 创建加载器实例&#…

消息中间件分类

消息中间件(Message Middleware)是一种在分布式系统中实现跨平台、跨应用通信的软件架构。它基于消息传递机制,允许不同系统、不同编程语言的应用之间进行异步通信。 常见的消息中间件类型包括: 1. JMS(Java Message S…