主成分分析

主成分分析(Principal Component Analysis,简称PCA)是一种统计方法,它通过正交变换将一组可能相关的变量转换成一组线性不相关的变量,这些不相关变量称为主成分。PCA常用于降维、数据压缩和模式识别等领域。

PCA的主要目标:
  • 降维:减少数据集中的特征数量,同时尽量保留原始数据的变异性。
  • 去相关:将原始数据转换为一组不相关的变量,便于后续分析。
PCA的工作原理:
  1. 标准化数据:由于PCA受到数据尺度的影响,通常首先对数据进行标准化处理,确保每个特征的均值为0,标准差为1。
  2. 协方差矩阵计算:计算数据的协方差矩阵(对于标准化数据,协方差矩阵即相关系数矩阵),以确定数据特征之间的相关性。
  3. 特征值和特征向量计算:计算协方差矩阵的特征值和对应的特征向量。特征值表示了每个主成分的方差贡献,而特征向量则表示了主成分的方向。
  4. 选择主成分:根据特征值的大小,选择最重要的几个主成分。通常选择累积贡献率达到一定比例(如95%)的主成分。
  5. 构造新的空间:使用选定的主成分的特征向量作为基,构造新的空间,将原始数据投影到这个新空间中。
  6. 转换数据:将原始数据转换到由主成分定义的新坐标系中,实现降维。
PCA的应用场景:
  • 图像压缩:在图像处理中,PCA可以用来减少图像数据的维度,同时尽量保留图像的重要信息。
  • 语音识别:在语音识别系统中,PCA可以帮助减少特征空间的维度,提高识别效率。
  • 金融分析:在金融市场分析中,PCA可以用来识别资产收益的主要驱动因素。
  • 生物信息学:在基因表达数据分析中,PCA可以帮助识别数据中的主要变异模式。
注意事项:
  • PCA假设主成分的分布是正态分布,如果数据不满足这一假设,可能需要其他方法。
  • PCA对噪声敏感,如果数据中包含噪声,可能会影响主成分的提取。
  • 选择保留的主成分数量是一个需要考虑的问题,过多的主成分可能导致过拟合,过少则可能丢失重要信息。
实现代码
# 导入matplotlib的pyplot模块,用于数据可视化
import matplotlib.pyplot as plt # 从sklearn库中导入PCA算法,用于数据降维
from sklearn.decomposition import PCA # 从sklearn.datasets模块导入iris数据集
from sklearn.datasets import load_iris# 加载iris数据集,并将特征数据和标签分别赋值给x和y
data = load_iris()
y = data.target  # 标签数据,表示不同种类的鸢尾花
x = data.data    # 特征数据,包含鸢尾花的测量数据

在这里插入图片描述
在这里插入图片描述

# 初始化PCA对象,设置降维后保留的主成分数目为2
pca = PCA(n_components=2)# 使用PCA算法对原始数据x进行降维处理,并将降维后的数据存储在reduced_x中
reduced_x = pca.fit_transform(x)# 初始化三个列表,用于存储不同类别数据在降维后的坐标
red_x, red_y = [], []  # 用于存储类别0的数据
blue_x, blue_y = [], []  # 用于存储类别1的数据
green_x, green_y = [], []  # 用于存储类别2的数据# 遍历降维后的数据,根据标签y的值,将数据分配到对应的列表中
for i in range(len(reduced_x)):if y[i] == 0:  # 如果标签为0red_x.append(reduced_x[i][0])  # 将第一个主成分的值添加到red_xred_y.append(reduced_x[i][1])  # 将第二个主成分的值添加到red_yelif y[i] == 1:  # 如果标签为1blue_x.append(reduced_x[i][0])  # 将第一个主成分的值添加到blue_xblue_y.append(reduced_x[i][1])  # 将第二个主成分的值添加到blue_yelse:  # 标签为2的情况green_x.append(reduced_x[i][0])  # 将第一个主成分的值添加到green_xgreen_y.append(reduced_x[i][1])  # 将第二个主成分的值添加到green_y# 使用matplotlib的scatter函数绘制散点图,可视化降维后的数据
# 不同类别的数据使用不同的颜色和标记进行区分
plt.scatter(red_x, red_y, c='r', marker='x')  # 类别0的数据用红色'x'标记
plt.scatter(blue_x, blue_y, c='b', marker='D')  # 类别1的数据用蓝色'D'标记
plt.scatter(green_x, green_y, c='g', marker='.')  # 类别2的数据用绿色'.'标记# 显示图表
plt.show()

在这里插入图片描述以上代码展示了如何使用主成分分析(PCA)对数据进行降维,并使用matplotlib库进行数据可视化。

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

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

相关文章

EGST:Explicit Geometric Structure Transformer论文解读

目录 一、导言 二、相关工作 1、3D局部描述子 2、点云配准方法 三、EGST模型 1、结构化特征 2、特征提取 3、点云匹配 4、变换估计 5、损失函数 四、实验 1、数据集 2、评估指标 3、细节 4、对比实验 一、导言 该论文提出一种基于增强几何结构特征的点云配准方…

C语言详解文件操作

目录 什么是文件? 为什么使用文件? 程序文件和数据文件、文本文件和二进制文件 1.程序文件和数据文件 1.1程序文件 1.2数据文件 2.文本文件和二进制文件 文件的打开和关闭(流、标准流、文件指针和文件的打开与关闭) 1.流和标…

有点好玩的python运维脚本

python运维脚本 1. 常用端口扫描2. 文件整理 1. 常用端口扫描 在计算机网络中,端口是一个通信端点,允许不同的进程或服务通过网络连接和交换数据。端口通过数值来标识,并与特定的协议相关联。未采取适当安全措施而保持端口开放,可…

InternLM Xtuner Qlora 微调

Xtuner 简介 XTuner 是由上海人工智能实验室开发的一款低成本大模型训练工具箱。它以高效、灵活和全能的特性,成为轻量化大模型微调的理想选择。借助 XTuner,用户仅需 8GB 显存即可对 InternLM2-7B 模型进行微调,从而定制出独一无二的 AI 助手…

C++~~期末复习题目讲解---lijiajia版本

目录 1.类和对象 (3)创建对象的个数 (3)全局变量,局部变量 (4)构造函数的执行次数 (5)静态动态析构和构造顺序 (6)初始化顺序和声明顺序 &a…

安装systemd-bootchart

要安装systemd-bootchart,你可以按照以下步骤进行: 步骤一:更新软件包列表 首先,打开终端并更新你的软件包列表,以确保你拥有最新的可用软件包信息。运行以下命令: sudo apt update步骤二:安…

Git使用总结(git使用,git实操,git命令和常用指令)

简介:Git是一款代码版本管理工具,可以记录每次提交的代码,防止代码丢失,可实现版本迭代,解决代码冲突,常用的远程Git仓库:Gitee(国内)、GitHub(国外&#xff…

接口请求的六种常见方式详解(get、post、head等)

一.接口请求的六种常见方式: 1、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体) 2、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建…

封装console

目的 1. 封装console.log , 使得打印更美观方便 2. 同时希望上线后不在打印消耗资源 例图: export const prettyLog () > {const isProduction import.meta.REACT_APP_ENV "prod";const isEmpty (value) > {return value null || val…

Flutter 实现dispose探测控件

文章目录 前言一、什么是dispose探测控件?1、通常情况2、使用dispose探测控件 二、如何实现1、继承StatefulWidget2、定义dipose回调3、定义child4、重载Dispose方法5、build child 三、完整代码四、使用示例1、基本用法2、设置定义数据 总结 前言 开发flutter一般…

Java 期末复习 习题集

💖 单选题 💖 填空题 💖 判断题 💖 程序阅读题 1. 读代码写结果 class A {int m 5;void zengA(int x){m m x;}int jianA(int y){return m - y;} }class B extends A {int m 3;int jianA(int z){return super.jianA(z) m;} …

Chapter 6 Frequency Response of Amplifiers

Chapter 6 Frequency Response of Amplifiers 这一节我们学习单极和差分运放的频率响应. 6.1 General Considerations 我们关心magnitude vs 频率, 因此有低通, 带通, 高通滤波器 6.1.1 Miller Effect Miller’s Theorem 考虑impedance Z1和Z2, X和Y之间增益为Av. Z1 Z/(…

spring 启动顺序

BeanFactoryAware 可在Bean 中获取 BeanFactory 实例 ApplicationContextAware 可在Bean 中获取 ApplicationContext 实例 BeanNameAware 可以在Bean中得到它在IOC容器中的Bean的实例的名字。 ApplicationListener 可监听 ContextRefreshedEvent等。 CommandLineRunner 整…

数据结构与算法笔记:基础篇 - 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?

概述 上篇文章,我们学习了树、二叉树及二叉树的遍历,本章来学习一种特殊的二叉树,二叉查找树。二叉查找树最大的特点就是,支持动态数据集合的快速插入、删除、查找操作。 之前说过,散列表也是支持这些操作的&#xf…

盘点2024年5月Sui生态发展,了解Sui近期成长历程!

2024年5月是Sui的第一个生日月,Sui迎来了它的上线一周年纪念日。在过去的一年中Sui在技术进步与创新、生态系统的扩展、社区发展与合作伙伴关系以及重大项目和应用推出方面取得重要进展,展示了其作为下一代区块链平台的潜力。 以下是Sui的近期成长历程集…

QT 信号和槽 通过自定义信号和槽沟通 如何自定义槽和信号的业务,让它们自动关联 自定义信号功能

通过信号和槽机制通信,通信的源头和接收端之间是松耦合的: 源头只需要顾自己发信号就行,不用管谁会接收信号;接收端只需要关联自己感兴趣的信号,其他的信号都不管;只要源头发了信号,关联该信号…

STM32 | 独立看门狗 | RTC(实时时钟)

01、独立看门狗概述 在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状…

QQ号码采集器-QQ邮箱采集器

寅甲QQ邮箱采集器或QQ号码采集软件, 一款采集QQ号、QQ邮件地址,采集QQ群成员、QQ好友的软件。可以按关键词采集,如可以按地区、年龄、血型、生日、职业等采集。采集速度非常快且操作很简单。

BoardLight - hackthebox

简介 靶机名称:BoardLight 难度:简单 靶场地址:https://app.hackthebox.com/machines/603 本地环境 靶机IP :10.10.11.11 ubuntu渗透机IP(ubuntu 22.04):10.10.16.17 windows渗透机IP(windows11&…

从欧盟弹性法案看软件物料清单(SBOM)

随着网络安全意识的提升和相关法规的推动,SBOM在国际上网络安全实践中的重要性日益凸显。 例如:美国国土安全部(DHS)的 “软件供应链评估工具包”(SCAT)就鼓励软件供应商提供SBOM,以帮助买方评…