PCA数据降维技术详解

news2024/11/13 9:42:39

在数据分析和机器学习的世界里,维度灾难是一个不可忽视的问题。随着数据维度的增加,计算量急剧上升,模型复杂度变高,同时可能引入噪声和冗余信息,影响模型的性能和解释性。主成分分析(Principal Component Analysis, PCA)作为一种经典且强大的数据降维技术,能够有效解决这些问题。

一、PCA基本原理

PCA通过线性变换将原始数据映射到一个新的坐标系统中,使得任何投影的第一大方差在第一个坐标(称为主成分)上,第二大方差在第二个坐标上,依此类推。这样,数据的主要特征就被保留在了前几个主成分中,而后面的成分则包含了较少的信息,可以被忽略,从而实现数据降维。

核心思想

  • 最大化方差:PCA希望投影后的数据在第一个主成分上具有最大的方差,即数据在该方向上的分散程度最大,这样能够更好地保留原始数据的信息。
  • 正交性:各个主成分之间是相互正交的,即它们之间没有线性相关性,避免了信息的重叠。

二、PCA算法步骤

1. 数据标准化

目的:PCA对数据的尺度非常敏感,即如果不同特征的度量单位不同(如一个是米,另一个是千克),或者数据的范围差异很大,那么这些特征在计算协方差矩阵时会产生不同的影响,导致结果偏向于数值较大的特征。因此,标准化是使每个特征的均值为0,方差为1,以确保每个特征在PCA分析中具有相同的权重。

方法:对于每个特征,从其每个值中减去该特征的均值,然后除以其标准差。

2. 计算协方差矩阵

目的:协方差矩阵是一个方阵,其元素表示各对特征之间的协方差,衡量了它们之间的线性关系。

方法:对于m个特征的数据集,协方差矩阵是一个m×m的矩阵,其中每个元素C[i][j]是第i个特征和第j个特征的协方差。

3. 计算协方差矩阵的特征值和特征向量

目的:特征值和特征向量描述了协方差矩阵的固有特性。特征值表示对应特征向量方向上的方差大小,即该方向上的信息量。特征向量则是数据在新的坐标系统中的方向,即主成分的方向。

方法:使用线性代数的方法(如特征值分解或奇异值分解)计算协方差矩阵的特征值和特征向量。

4. 选择主成分

目的:选择最重要的主成分,即那些能够最大程度保留原始数据信息的方向。

方法:按照特征值的大小从大到小排序,选择前k个最大的特征值对应的特征向量作为主成分。k的选择通常基于特征值的累积贡献率(即前k个特征值的和占总特征值之和的比例)或根据实际需要。

5. 数据投影

目的:将原始数据转换到新的坐标系统(由选定的主成分构成)中,得到降维后的数据。

方法:对于每个样本,将其与选定的k个特征向量进行点积运算,得到该样本在k个主成分上的投影,即降维后的数据。

实例:

from sklearn.decomposition import PCA
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

data = pd.read_excel('hua.xlsx')
#此行代码加载了名为hua.xlsx的Excel文件到pandas DataFrame中。
x = data.iloc[:, :-1]
y = data.iloc[:, -1]

pca = PCA(n_components=0.90)
pca.fit(x)
#您使用PCA进行特征降维,目标是保留原始数据90%的方差。

print('特征所占百分比:{}', format(sum(pca.explained_variance_ratio_)))
print(pca.explained_variance_ratio_)

print('降维后数据')
new_x = pca.transform(x)
print(new_x)

x_train, x_test, y_train, y_test = \
    train_test_split(new_x, y, test_size=0.2, random_state=0)

#用train_test_split函数将数据集划分为训练集和测试集,测试集占总数据的20%。

classifier = LogisticRegression()
classifier.fit(x_train, y_train)

train_pred = classifier.predict(x_train)
print(train_pred)

test_pred = classifier.predict(x_test)
print(test_pred)
#您使用逻辑回归模型进行训练和预测。
from sklearn import metrics

print(metrics.classification_report(y_train, train_pred))

print(metrics.classification_report(y_test, test_pred))

优缺点:

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

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

相关文章

第六篇——黄金分割:毕达哥拉斯如何连接数学和美学?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 人眼看到的美的东西,都可以从数学这个抽象的学科中得到明确的…

网页打印模板解析源码--SAAS本地化及未来之窗行业应用跨平台架构

一、打印模板解析 /* ///cyberwin_offline_database_printtemp.js未来之窗打印模板解析技术 2024-09 */ class CyberWin_Database_printtemp_KV {constructor() {this.data {};this.line_count 0 ;}解析(数据) {// this.data[key] value;this.line_count 0 ;this.data {}…

生日(仅粉丝可见,生日是9月6日,提前一天发的)

祝我自己生日快乐! 感谢大家的陪伴与支持,以后我会努力做作品的! (累谁也不能累自己,所以我打算放3天假,反正延迟开学,先玩了来再去上学!)

数据库超时排查

背景: 项目是用的springboot,连接池用的是hikaricp,且数据库连接做了LB配置,之前就是经常会有数据库出现问题,专家给到的解决方案。 数据连接io超时报错,排查了当时数据库各项指标都无显示异常,…

基于SA-BP模拟退火算法优化BP神经网络实现数据预测Python实现

在数据分析和机器学习领域,时间序列预测和多输入单输出系统的预测是重要且复杂的问题。传统的BP(反向传播)神经网络虽然具有强大的非线性函数逼近能力,但在处理这些问题时容易陷入局部极小值、训练速度慢以及过拟合等问题。为了克…

【读书笔记-《30天自制操作系统》-15】Day16

本篇内容继续多任务的讲解。上一篇中实现了两个任务之间的自动切换,但还不够通用,这里将其优化为多个任务之间的切换。接着引入了任务休眠的概念与休眠的程序实现。最后介绍了任务的优先级,一种用切换时间的长短来衡量,一种用Task…

【Qt】文件对话框QFileDialog

文件对话框QFileDialog ⽂件对话框⽤于应⽤程序中需要打开⼀个外部⽂件或需要将当前内容存储到指定的外部⽂件。 通过QFileDialog 可以选择一个文件,能够获取到这个文件的路径,打开文件/保存文件。 常⽤⽅法介绍: 1、打开⽂件(⼀…

【高中生讲机器学习】17. 讲人话的主成分分析,它来了!(上篇)

创建时间:2024-08-13 首发时间:2024-09-05 最后编辑时间:2024-09-05 作者:Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏,很高兴遇见你~ 我是 Geeker_LStar,一名准高一学生,热爱…

Redis 集群高可用详解及配置

关型数据库 关系型数据库: 是建立在关系模型基础上的数据库,其借助于集合代数等数学概念和方法来处理数据库中的数据 主流的 MySQL、Oracle、MS SQL Server 和 DB2 都属于这类传统数据库 关型数据库的优缺点 特点: 1、数据关系模型基于关系…

Redis使用——Redis的redis.conf配置注释详解(三)

Redis使用——Redis的redis.conf配置注释详解(三) 背景 日常我们开发时,我们会遇到各种各样的奇奇怪怪的问题(踩坑o(╯□╰)o),这个常见问题系列就是我日常遇到的一些问题的记录文章系列,这里整…

鸿蒙轻内核M核源码分析系列四 中断Hwi

往期知识点记录: 鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总 持续更新中…… 在鸿蒙轻内核源码分析系列前几篇文章中,剖析了重要的数据结构。本文,我们讲述一下中断,会给读者介绍中…

Ubuntu固定USB串口名(包括1拖N的USB串口)

在运行Ubuntu系统的开发板上,如果使用可插拔的USB串口,有时候程序正在运行时,如果突然连接传感器的USB串口设备被插拔了一下,这时,会发现系统中的USB串口名发生了改变。例如,插拔之前是/dev/ttyUSB0,插拔之后变成了/dev/ttyUSB3。发生这种情况的时候,有时候会导致程序无…

Windows I/O系统

硬件存储体系 寄存器 处理器内部定义的存储体,它们除了存储功能,往往还兼有其他的能力,比如参与运算,地址解析,指示处理器的状态,等等。寄存器是由处理器内部专门的触发器电路实现的,处理器往…

jupyter里怎么设置代理下载模型

使用如下方式: %env http_proxyhttp://10.110.146.100:7890 %env https_proxyhttp://10.110.146.100:7890

【SLAM】GNSS的定义,信号原理以及RTK在多传感器融合中的使用方法

【SLAM】GNSS的定义,信号原理以及在多传感器融合中的使用方法 1. GNSS的定义2. GNSS信号原理3. RTK - Real Time Kinematic4。 如何使用RTK做融合和优化 1. GNSS的定义 GPS(Global Positioning System)和GNSS(Global Navigation …

Ubuntu22.04安装colmap

首先上这里查看自己电脑GPU的CMAKE_CUDA_ARCHITECTURES 终端输入以下内容安装预先的前置依赖 sudo apt-get install \git cmake ninja-build build-essential \libboost-program-options-dev libboost-filesystem-dev \libboost-graph-dev libboost-system-dev libboost-tes…

【操作系统存储篇】操作系统的设备管理

目录 一、广义的IO设备 分类 按使用特性分类 按信息交换的单位分类 按设备的共享属性分类 按传输速率分类 二、IO设备的缓冲区 三、SPOOLing技术 一、广义的IO设备 输入设备:对CPU而言,凡是对CPU进行数据输入的。 输出设备:对CPU而…

深度解析:基于离线开发的数据仓库转型落地案例

在当今这个数据驱动的时代,各行各业都正经历着前所未有的变革。伴随技术的飞速发展,数据仓库作为企业数据管理与分析的核心,如何更好地发挥作用,助力企业保持业务的敏捷性与成本效益,成为大家关心的焦点问题。本文将通…

vue使用html2Canvas导出图片 input文字向上偏移

vue使用html2Canvas导出图片 input文字向上偏移 图中 用的是element的输入框 行高 32px,经常测试 你使用原生的input 还是会出现偏移。 解决方法:修改css样式 1.怎么实现导出 网上随便找很多 2.在第一步 获取你要导出的元素id 克隆后 修改他的样式或者 你直接在你需…

web渗透:SSRF漏洞

SSRF漏洞的原理 SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种安全漏洞,它允许攻击者构造请求,由服务端发起,从而访问服务端无法直接访问的内部或外部资源。这种漏洞通常发生在应用程序允许用…