主成分分析

主成分分析(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,一经查实,立即删除!

相关文章

tcp协议中的起始序号

目录 起始序号 引入 序号和确认序号 总结 起始序号 引入 在介绍TIME_WAIT状态时,我们就提到了起始序号 -- tcp协议的超时重传(去重,确定时间),通信建立机制(三次握手,通信,四次挥手的细节和图解),为什么是3次/4次,肉机,全/半连接队列,SYN洪水,TIME_WAIT状态(解决,为什么出现…

重写setter方法要小心递归调用

错误的重写 // 假设SQIPerson有一个子类叫做SQISmithPerson, 专门表示那些姓"Smith"的人, 重写了 lastName 属性对应的设置方法 - (void)setLastName:(NSString *)lastName {if (![lastName isEqualToString:"Smish"]) {[NSException raise:NSInvalidArgu…

【系统学C++】一、从C语言到C++(一)

【系统学C】一、从C语言到C(一) C介绍C语言和C的联系C介绍 头文件命名空间定义命名空间使用命名空间中的名称使用using声明或指令命名空间与C语言的对比给命名空间起别名注意事项std 标准输入输出std::endl使用std::cout进行输出使用std::cin进行输入格式…

EGST:Explicit Geometric Structure Transformer论文解读

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

flutter image_picker 执行拍照的图片怎么保存到本地

在 Flutter 中,使用 image_picker 插件拍照的图片默认会被保存到设备的临时目录中。这个临时目录的具体位置取决于设备的操作系统。在 iOS 上,它通常是应用的沙盒目录;在 Android 上,它通常是应用的缓存目录。 这些图片不会被自动…

C语言详解文件操作

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

Web前端管理系统项目:深度解析与实现之道

Web前端管理系统项目:深度解析与实现之道 在当今数字化时代,Web前端管理系统项目已成为企业信息化建设的核心组成部分。这类项目不仅涉及技术的深度和广度,更考验开发者的综合素质和创新能力。本文将从四个方面、五个方面、六个方面和七个方…

希尔排序(Shell_sort)

希尔排序常用于插入排序的数据预处理,用于提升插入排序的大数据处理速度 将插入排序的函数改为n递增即可使用希尔排序 间隔为n的插入排序: 将i初始值改为1,然后j循环所有的1改为n即可 void Insertion_sort(int *arr,int size,int n) {int…

有点好玩的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…

【C++关键字】指针空值nullptr(C++11)

指针空值nullptr(C11) C98中的指针空值C11中的指针空值 C98中的指针空值 在学习C语言阶段,由良好的C\C编程习惯,声明一个变量时最好给该变量一个合适的初始值,否则会出现未初始化的指针,野指针等情况。 in…

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;} …

Mybatis面试题系列四

1、通常一个Xml映射文件,都会写一个Dao接口与之对应, 请问,这个Dao接口的工作原理是什么?Dao接口里的方法, 参数不同时,方法能重载吗? Dao 接口即 Mapper 接口。接口的全限名,就是映…

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/(…