【数据处理方法】主成分分析(PCA)原理分析

article/2025/9/11 1:10:48

        笔者最近在学习的过程需要使用一些数据分析和处理的方法,而PCA就是其中常用的一种手段。但在自学的过程中,由于笔者水平有限,对一些博客中的公式不是能很好理解(数学不好的辛酸Ծ‸Ծ),导致总是对整个方法的原理没有一个透彻的理解。后来在视频用最直观的方式告诉你:什么是主成分分析PCA_哔哩哔哩_bilibili

的帮助下,笔者终于从整体上理解了该方法,在此也向该视频作者致以诚挚的感谢。接下来,笔者尽量用自己的话来总结从该视频中的收获,谈谈对PCA原理的理解。为照顾一些和笔者一样基础不太好的小伙伴,这里尽量使用少的公式,而用一些图示来辅助理解。如无特别标明,本文所用的所有图片均来自上述视频。

事先说明,如果仅是对PCA步骤感兴趣的小伙伴,可以直接跳到总结部分,也方便节约时间。:)

一.PCA简介

        主成分分析(Principal components analysis, PCA),顾名思义,其目的在于提取数据中的主要成分信息,因此,常用于对数据的提炼,例如:降维(使用最多的领域之一),异常值检测等,是数据分析中的一种重要方法。

        那么,PCA究竟做了什么呢?我们通过下面的图来简单理解一下:

        我们首先来看一个特殊情况,假如在原坐标系下,有这样六个点,每个点的坐标包括x和y,这样,当我们要记录这些点的坐标时,我们需要同时记录它们的x坐标和y坐标,也就是要记录2个维度的信息。

        那么,假如我们移动坐标系,让新坐标系如右所示,令所有的点都位于一个轴上,同时能较好的保留原先数据分布的信息。这样,由于在y'上坐标全部为0,因此我们完全可以去掉,仅用x'坐标就可以表示这些点。这样,原先需要保存2维的坐标信息,在进行这样的坐标系转换后,就仅需保留1维的坐标信息,我们便完成了对数据的提炼,或者在这里,可以称为对数据的降维。

        相信在看了上面一段话后,有的小伙伴已经悟到了,没错,PCA所作的,就是这样一个坐标系转换的事情。

        PCA其实目的就是为了寻找这样一个转换后的坐标系,使数据能尽可能分布在一个或几个坐标轴上,同时尽可能保留原先数据分布的主要信息,使的原先高维度的信息,在经过转换后可以用低维度的信息来保存。而新坐标系的坐标轴,称为主成分(Principal components, PC), 这也就是PCA的名称来源。

        那么,怎么样的坐标系,算是“保留信息最多呢”?

         答:选择数据分布最分散,即方差最大的方向。

        可以对比上面两张图上的两个坐标轴方向,可以看到,当数据投影到图一方向的坐标轴上时,数据分布的最为分散,此时,方差也是最大,这种情况下,能够最完整的保留原先数据的差异性,从而便于区分。

        而在图二中,数据在坐标轴上的投影就有许多重叠的地方,方差会较小,这种情况下,原先差异性很大的数据在投影后便无法区分,没有保留原先数据的信息,不是一个好的方向。

        因此,我们把方差最大的方向选为主成分1的方向,其垂直方向即为主成分2方向,以此类推。

二.PCA方法

        在了解PCA的目的后,接下来,就是考虑如何实现,即如何实现这样的坐标系转换。

1. 去中心化

        首先,要将数据去中心化,即将坐标原点放在数据中心。若不执行去中心化,就会出现这种现象:

        

        相当于在原地空转,可能发现不了最好的方向。

        进行了去中心化后,将数据中心放在坐标原点,则就会避免这个问题。

 

 

2. 找坐标系

        即找到方差最大的方向。

        在回答这个问题前,我们首先回顾一下矩阵线性变换的知识。

1) 拉伸

        拉伸矩阵S的特点是只在对角线上有数字,即拉伸矩阵是对称矩阵,满足S^{T}=S,它实现的数据在轴上的水平拉伸(包括缩放)。

2)旋转

        如图,旋转矩阵的特点是,其逆矩阵就等于其本身,即R^{-1}=R,图中R的操作,实现的是逆时针旋转坐标轴θ角。

 

        我们手里的数据,其实就相当于一个服从多维高斯分布的数据经过拉伸和旋转之后形成的数据,因此,找到方差最大的方向,其实就是求这个旋转矩阵R,即求我们旋转的角度。

        如何求R,这里先给个结论,协方差矩阵的特征向量就是R。具体推导我们慢慢来:

 

        首先回顾一下协方差的概念,协方差代表的是两个变量变化的一个相关程度,如果x增大,y也增大,则成为正相关;反之,则为负相关,而这个相关的程度,就是协方差。x和y的协方差用cov(x,y)表示,正相关时,cov(x,y)>0;负相关时,cov(x,y)<0,不相关则为0。顺便一提,变量自己和自己的协方差,就是方差,即cov(x,x)=var(x)

        因此,协方差矩阵的表示如下: 

        当数据进行拉伸和旋转时,协方差也会随之改变,根据协方差的定义,协方差矩阵也可以通过这样计算得到。

         即C等于数据乘以其转置,再除以n-1,n为数据的维度。

        现在再回来看我们手上的数据D’,由于D’是由白数据经过拉伸S和旋转R得到,即D’=RSD,而白数据的协方差矩阵C为单位矩阵,因此,结合拉伸和旋转矩阵的性质代入公式后,可以得到D'的协方差矩阵C’=RLR-1。R即旋转矩阵,L为S的平方。

 

 

        结合特征向量和特征值的概念,现在,我们可以清楚的看到,R就是C'的特征向量的矩阵,而L则是特征值的矩阵,两者分别代表旋转和拉伸的程度。

        现在,我们就可以对如何求R做一个概括:只要我们对手上的数据求协方差矩阵,然后求它的特征向量矩阵,这个特诊向量矩阵就是R。同时,确定了R后,我们就确定了方差最大的方向,也就是主成分的方向,这样,就完成了对坐标系的转换。

三.总结

        总结来说,PCA的步骤主要就是以下几步:

        对数据进行去中心化(将坐标原点放到数据中心)->求数据的协方差矩阵C->再求得C的特征向量矩阵R->将原坐标系下(去中心化后)的数据通过R进行旋转变化,即得到经过PCA转换后的坐标,R也是主成分的方向。

        以上便是关于PCA的原理分析。由于笔者才疏学浅,定然还有许多错误与纰漏之处,欢迎大家的补充,未来笔者也会不断进行修订。在对代码理解后,笔者接下来计划补充matlab上PCA的使用方式,帮助进入实际应用。

        最后,再次感谢该视频及其创作者!

用最直观的方式告诉你:什么是主成分分析PCA_哔哩哔哩_bilibili


http://chatgpt.dhexx.cn/article/jqfEtiTO.shtml

相关文章

主成分分析法原理简单理解及技术实现

主成分分析法 主成分分析是利用降维的思想,在损失很少信息的前提下,把多个指标转化为几个综合指标的多元统计方法。通常把转化生成的综合指标称为主成分,其中每个主成分都是原始变量的线性组合,且各个主成分之间互不相关,使得主成分比原始变量具有某些更优越的性能…

win10+tensorflow1.14+cuda10安装踩坑

tensorflow1.14安装记录 需要python3.7&#xff0c;cuda10&#xff0c;cudnn7.6&#xff0c;visual studio 2017 可以用visual studio 2017 community 版本 &#xff0c;win10 sdk要加上&#xff0c;build tools要装上 cuda10.0安装不上报错visual studio integration faile…

Win10 下载torch以及CUDA配置

下载torch以及CUDA配置 下载torch和torchvision安装torch和torchvision安装CUDA检查是否成功 下载torch和torchvision 进入该网站&#xff0c;下载对应的torch和torchvision版本。 https://download.pytorch.org/whl/torch_stable.html以该图为例&#xff0c;cu102代表CUDA10…

Ubuntu 18.10 下安装CUDA10/CUDA10.1

GPU&#xff1a;GeForce840M 显卡驱动&#xff1a;预装&#xff0c;版本390 笔记本 1.降级gcc 使用gcc5 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install gcc-5 g-5 sudo update-alternatives --install /usr/bin/gcc gcc /us…

查看CUDA和cuDNN的版本号 | Win10安装CUDA10和cuDNN

文章目录 &#x1f514; Linux下查看CUDA和cuDNN的版本&#x1f499; Win10安装CUDA10和cuDNN&#xff0c;感谢原作者&#xff0c;链接如下&#x1f680;&#x1f680; 文末专栏推荐部分 &#x1f680;&#x1f680;❤️ 当生成器和判别器趋于平衡&#xff0c;那便是爱情 &…

【NVIDIA】Win10 + CUDA10 + cuDNN 安装教程(转载)

目录 一、前言 二、官方安装教程及软件包 1、官方教程 2、CUDA Toolkit 10.0 Download 3、cuDNN Download 三、Win10安装CUDA10及cuDNN 1、CUDA安装 2、cuDNN配置 3、万事大吉&#xff0c;只欠重启 四、一些后事 问题1&#xff1a;安装过程中电脑自动重启。 问题2&a…

英伟达CUDA 10终于开放下载了

栗子 发自 凹非寺量子位 出品 | 公众号 QbitAI 英伟达的CUDA 10工具包&#xff0c;终于可以下载了。 与9字头的前辈相比&#xff0c;10.0是第一次为图灵GPU定制的版本。 英伟达新近发布的GeForce RTX 20系列和Quadro RTX系列显卡&#xff0c;以及新一代GPU Tesla T4&#xff0c…

win10+cuda10+tensorflow-gpu最新安装教程

win10cuda10tensorflow-gpu最新安装教程 背景简介安装包准备安装过程总结 背景简介 作为刚入门深度学习的小白&#xff0c;新购置了一台机子&#xff0c;准备兴高采烈的开始用GPU跑深度学习算法&#xff0c;百度了一通win10下安装cuda和tensorflow-gpu的教程&#xff0c;十分繁…

30 系列显卡是新一代架构,新驱动不支持 cuda 9 以及 cuda 10,所以必须安装 cuda 11

30 系列显卡是新一代架构&#xff0c;新驱动不支持 cuda 9 以及 cuda 10&#xff0c;所以必须安装 cuda 11 最近在训练一个深度学习模型&#xff0c;要求的环境是python3.7 torch1.3, 而torch1.3支持的cuda版本为9.2或10.2 但是我所用的显卡为3090, 所以网上的解决办法都试遍…

在CUDA10的环境下安装支持gpu的tensorflow版本(亲测有效)

由于英伟达官方宣称CUDA10有着巨大的性能提升&#xff0c;我便迫不及待的想尝试用它来训练深度学习模型&#xff0c;然而现在Tensorflow的最新官方GPU版本1.12并不支持在CUDA10下的模型训练&#xff0c;因此便翻墙到国外论坛找材料&#xff0c;最终找到了可以完美适配CUDA10的t…

Ubuntu18 Cuda10升级Cuda11+Cudnn8+TensorRT7.1+Opencv3

文章目录 0 前沿1 显卡驱动和CUDA安装2 TensorRT3 Opencv3 0 前沿 目前TensorRT已经升级到TensorRT7.2版本&#xff0c;开始需要Cuda11cudnn8支持&#xff08;7.1版本也有10.2版本&#xff09;&#xff0c;这里简单记录以下安装流程及个别bug处理 1 显卡驱动和CUDA安装 下载…

【NVIDIA】Win10 + CUDA10 + cuDNN 安装教程

目录 一、前言 二、官方安装教程及软件包 1、官方教程 2、CUDA Toolkit 10.0 Download 3、cuDNN Download 三、Win10安装CUDA10及cuDNN 1、CUDA安装 2、cuDNN配置 3、万事大吉&#xff0c;只欠重启 四、一些后事 问题1&#xff1a;安装过程中电脑自动重启。 问题2&…

cuda9升级cuda10方法记录 ubuntu1604

由于最近的tensorflow2.0和pytorch都纷纷需要cuda10的支持&#xff0c;即使是使用conda安装&#xff0c;也要跟新driver 到410以上&#xff0c;以前的384版本的driver也不行了。索性就一起升级了,其中遇到很多坑&#xff0c;记录一下&#xff0c;希望能帮助大家&#xff0c;不过…

Win10 安装CUDA10(包括各种版本的CUDA和cuDNN下载链接)

我用的是Tensorflow1.15和keras2.3.1.环境是用Anaconda管理的 每个版本的Tensorflow-GPU与CUDA的关系。 https://tensorflow.google.cn/install/source_windows?hlen#gpu 首先是各种版本的DUDA的下载链接 https://developer.nvidia.com/cuda-toolkit-archive 网页打开之后是…

(三)cuda8和cuda10的切换

编辑bashrc文件 sudo gedit ~/.bashrcsource ~/.bashrc 第一种方法&#xff1a;把路径中的两个cuda-8.0 替换为cuda-10.0 然后source 第二种方法&#xff1a; 都改为cuda 然后source export PATH/usr/local/cuda/bin${PATH::${PATH}} export LD_LIBRARY_PATH/usr/local/…

cuda10 + vs2017 下载安装,配置环境

一、准备 1 &#xff0c;首先查询电脑GPU&#xff1a; 1&#xff09;Win10如何查看Nvidia支持的CUDA版本&#xff1a; &#xff08;1&#xff09;打开“控制面板”&#xff0c;点击”硬件和声音“&#xff0c;点击“NVIDIA控制面板”&#xff1a; &#xff08;2&#xff0…

windows10安装NVIDIA显卡驱动+cuda10.0教程

windows10安装NVIDIA显卡驱动cuda10.0教程 1、安装个鲁大师2、确定本机是否支持GPU加速3、更换至匹配的显卡驱动4、下载和安装cuda和cudnn5、验证6、游戏加速7、分享个漂亮的壁纸 1、安装个鲁大师 查看下显卡驱动的版本。安装cuda10需要驱动版本大于411。否则就卸载。 2、确定…

Win10安装CUDA10和cuDNN

官方安装教程 CUDA&#xff1a;https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html cuDNN&#xff1a;https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installwindows WIN10安装CUDA10 CUDA Toolkit 10.0 Download&a…

win10系统CUDA10.0安装教程(for tensorflow2.0)

前言&#xff1a;目前最新的CUDA版本是10.1&#xff0c;但是出于某种神秘的原因&#xff0c;目前tensorflow2.0仅支持CUDA10.0。这个已经在我的电脑与一部分网友的反馈中得到了证实。tensorflow2.0不仅绑定了CUDA的版本&#xff0c;还对CUDA安装配置有一定要求。为了实现GPU加速…

基于Centos7安装cuda 10

环境介绍&#xff1a;一、安装驱动二、安装cuda 环境介绍&#xff1a; CentOS Linux release 7.9.2009 (Core) NVIDIA: Tesla K80 一、安装驱动 1、检查显卡版本 lshw -numeric -C display *-display description: 3D controller product: GK210GL [Tesla K80] [10DE:10…