PCA: Principal Components Analysis,主成分分析法原理

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

PCA: Principal Components Analysis,主成分分析法原理
1、引入

  PCA算法是无监督学习专门用来对高维数据进行降维而设计,通过将高维数据降维后得到的低维数能加快模型的训练速度,并且低维度的特征具有更好的可视化性质。另外,数据的降维会导致一定的信息损失,通常我们可以设置一个损失阀值来控制信息的损失。

  设原始样本集为:这里写图片描述,即样本数为m个,每个样例有n个特征维度。

2、预处理

  在使用PCA降维之前,样本集需要满足两个条件:

  1)特征去均值化(即均值零化)。对每个特征,使用当前特征的值减去该维特征的平均值。对第i个样例的第j个特征,计算公式为:
这里写图片描述
  其中第i个特征的均值为:这里写图片描述

  当处理自然图像时,则将每个特征减去图像本身的均值,而不是减去该特征的均值。即:这里写图片描述

  为何需要去均值?这主要是去除均值对变换的影响,减去均值后数据的信息量没有变化,即数据的区分度(方差)是不变的。如果不去均值,第一主成分,可能会或多或少的与均值相关。[5]

  2)归一化处理:将不同特征的数据范围归一化到同一范围中,一般将每个值除以当前维的最大值。

3、PCA算法

  PCA算法的核心思想在于找出数据变化的主方向和次方向,如图3.1所示,向量u1 的方向可以认为是数据的主方向,而u2是次方向。
这里写图片描述
图3.1 数据变化的主次方向[1]

  那么如何得到数据变化的主次方向?假设样本集有m个样例,每个样例有n个特征。样本集可以表示为:这里写图片描述

  第i个样例的特征向量表示为:这里写图片描述

  则样本集的协方差矩阵为:这里写图片描述

  协方差矩阵为n*n大小的方阵,具有n个特征向量。

  其中协方差计算公式为:这里写图片描述

  计算协方差矩阵的特征向量及对应的特征值。这里写图片描述

  将特征向量按特征值的大小按列排放,组成矩阵u=[u1 u2 … un],对应的特征值由大到小分别为:这里写图片描述。则特征向量u1为主特征向量(对应的特征值最大),u2为次特征向量,以此类推。

  对于特征值越大的特征向量,样本集在该方向上的变化越大。对于由特征向量组成的矩阵我们称为特征矩阵,特征矩阵是一个正交矩阵,即满足uTu=uuT=I。

  关于协方差矩阵的计算,以及其中的一些数学原理,可以参考文献[3,4]。

  如何理解协方差矩阵的特征向量为数据变化的主次方向,以及特征值越大,其对应的特征向量方向上的数据变化越大?

  答:使用协方差矩阵计算出来的特征值为其特征向量上的样本集的方差,当方差越大,说明数据集在该特征向量方向上越分散,变化越大,所以该方向就可以用来作为数据集的主方向。

  另外,特征向量之间相互正交,说明各特征之间相关性最小,基本接近0.

  独立==>不相关<==>协方差为零

  至此,我们已经得到了数据变化的主次方向,现在我们需要计算样本在每个特征向量上的长度。对于原始样例x,其在特征向量u1方向上的长度为:这里写图片描述

  现在我们使用特征矩阵来对样本进行旋转:这里写图片描述

  旋转后的坐标变换成了:(u1, u2, …, un)。

  现在若要将变换后的数据进行恢复,因为特征矩阵为正交矩阵,所以只需左乘特征矩阵的转置即可:

  因为:这里写图片描述

PCA算法过程[3]:(样本集有m个样例,每个样例n个特征)

1)将原始数据组成一个n*m大小的矩阵。

2)对矩阵的每行进行零均均值化处理,即对每个特征减去该行的均值。

3)计算协方差矩阵

4)求出协方差矩阵的所有特征向量及对应的特征值。

5)根据特征值从大到小对应的特征向量,取出前k个特征向量组成一个特征矩阵u。

6)将原始数据旋转到特征矩阵u所在的空间中,这里写图片描述,得到的数据即为降维后的结果。

4、损失误差分析

  在上一步中利用协方差矩阵计算得到n个特征向量,但是我们实际上只使用了前k个特征向量,而将后面的n-k个向量直接近似为0。
这里写图片描述
  直接将后面的特征近似为0会导致一定的损失。K的取值越大,损失的信息就越少,反之损失的信息就会越多。实际上,因为后面近似为0的特征向量对应的特征值是非常的小,故而将后面的特征近似为0不会导致过大的损失。

  具体损失可以用前k个特征值在所有特征值中所占的比例,由于协方差矩阵的特征值为方差,因而特征值之比即为方差百分比:
这里写图片描述
  其中,
这里写图片描述
  在处理图像时,一般需要a>=0.99,而其他情况下一般只需a>=0.95即可。

  另外,PCA算法具有缩放不变性,即所有的特征分量被放大或缩小相同的倍数,PCA输出的特征向量不会发生变化。

5、白化操作Whitening(白化算法)[2]

  白化操作主要用来去除各特征之间的关联度,减少特征冗余。比如图像中相邻像素有一定的关联性,很多信息是冗余的,这时去相关可以采用白化操作。

  白化操作主要完成两件事情:首先使得不同特征之间的相关性最小,接近0;其次是所有特征的方差相等。

  常见的白化操作有:

  1)PCA whitening。在利用PCA得到协方差矩阵的特征向量后,取前k个特征向量,各特征向量相互正交,此时相关性最小;再将新数据(旋转后的数据)的每一维除以标准差即得到每一维的方差为1。方差归一化:这里写图片描述

  pw: PCA white。

  2)ZCA whitening。首先利用协方差矩阵计算出所有的特征向量后,将所有特征向量取出,再进行方差的归一化操作,最后左乘特征矩阵u(其实相当于把数据还原回去)。

  它并不降低数据维度,而仅仅在PCA白化的步骤中保留所有成分,最后增加了一个旋转的步骤,这样仍然是单位方差。

这里写图片描述

6、总结

  PCA算法非常巧妙地利用协方差矩阵来计算出样本集在不同方向上的分散程度,利用方差最大的方向作为样本集的主方向。其主要过程是:首先利用样本集及特征构建一个样本矩阵,然后利用样本矩阵计算得到协方差矩阵,再计算协方差矩阵的特征值和特征向量,保留特征值前k大的特征向量作为新的维度方向。再将原始样本数据转换到新的空间维度。

附步骤其他图:
这里写图片描述
这里写图片描述

参考文献:
【0】http://wiki.mbalib.com/wiki/%E4%B8%BB%E6%88%90%E5%88%86%E5%88%86%E6%9E%90%E6%B3%95
[1] peghoty, http://blog.csdn.net/itplus/article/details/11451327
[2] tornadomeet, http://www.cnblogs.com/tornadomeet/archive/2013/03/21/2973231.html
[3] CodingLabs, http://blog.codinglabs.org/articles/pca-tutorial.html
[4] peghoty, http://blog.csdn.net/itplus/article/details/11452743
[5] viewcode, http://blog.csdn.net/viewcode/article/details/8789524

[6]从PCA和SVD的关系拾遗
[7]英文解读:https://stats.stackexchange.com/questions/134282/relationship-between-svd-and-pca-how-to-use-svd-to-perform-pca


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

相关文章

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

笔者最近在学习的过程需要使用一些数据分析和处理的方法&#xff0c;而PCA就是其中常用的一种手段。但在自学的过程中&#xff0c;由于笔者水平有限&#xff0c;对一些博客中的公式不是能很好理解&#xff08;数学不好的辛酸Ծ‸Ծ&#xff09;&#xff0c;导致总是对整个方法的…

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

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

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加速…