【机器学习】五、主成分分析原理

article/2025/9/11 1:05:15

在这里插入图片描述
主成分分析(Principal Component Analysis),简称PCA,是机器学习中一种常用来进行数据降维操作的方法。PCA通过矩阵变换,将高维数据变换到低维。本文主要分享PCA的数学原理,帮助大家了解PCA降维的理论基础。码字不易,喜欢请点赞!!!

一、PCA简介
下图是一个二维的手枪图片,我们知道手枪在现实中是三维的,那为什么下面这张手枪图是二维的我们也能认出来了?这是因为虽然这张图是二维的,但是图片保留了手枪的主要特征,比如抢管、扣手等。
在这里插入图片描述
如果我们换个角度拍,比如从上向下俯视拍,你可能会认为是跟小木棍。这个原因就是我们在降低维度的过程中没有最大程度的保留他的特征,使得你无法区分。那PCA当然不希望降维之后,数据的特征完全消失,而是希望在降低维度的同时,能最大的保留数据的特征(也就是最大化的保留数据之间的差异)。

比如,我们在学校有的人有主修(Major)和辅修(Minor)专业,这个数据集是个二维的,如果想降到一维,如下图,可能会发现,往 F e a t u r e X 1 Feature X_1 FeatureX1方向投影之后数据的差异会大于往 F e a t u r e X 2 Feature X_2 FeatureX2方向投影,因此降维操作更好的选择是往 F e a t u r e X 1 Feature X_1 FeatureX1方向投影。
在这里插入图片描述
那这个时候又会出现一个问题,如下左图,你会发现数据往 X 1 X_1 X1方向投影和往 X 2 X_2 X2方向投影都不能最大化的得到数据差异,更好的方法就是采用右图中的新坐标 Y 1 Y_1 Y1 Y 2 Y_2 Y2,往这个新的坐标系投影得到的结果就能很清楚的知道,我们应该选择往 Y 1 Y_1 Y1方向投影,从而达到降维和保留数据差异的结果。
PS:这里坐标轴的更换就是线性代数里面的基变换。
在这里插入图片描述
更加好的一点是,在重新选择坐标系之后,还可以进行轴旋转操作,经过这两步操作之后,我们将数据之间的相关性消除了,这里又变成了特征选择了。
在这里插入图片描述
二、线性代数基础
这里主要讲线性代数的四个知识点,一个是内积(投影),一个是基变换、以及特征分解和奇异值分解。

  1. 内积
    假设我们有两个向量 a = ( a 1 , a 2 , . . . , a n ) T a=(a_1,a_2,...,a_n)^T a=(a1,a2,...,an)T b = ( b 1 , b 2 , . . . , b n ) T b=(b_1,b_2,...,b_n)^T b=(b1,b2,...,bn)T,那么a和b的内积为:
    a ⋅ b = ( a 1 , a 2 , . . . , a n ) T ⋅ ( b 1 , b 2 , . . . , b n ) T = a 1 b 1 + a 2 b 2 + . . . + a n b n a·b = (a_1,a_2,...,a_n)^T·(b_1,b_2,...,b_n)^T=a_1b_1+a_2b_2+...+a_nb_n ab=(a1,a2,...,an)T(b1,b2,...,bn)T=a1b1+a2b2+...+anbn
    内积将两个向量映射为一个实数,后面我们会发现,如果一个向量的模为1,则内积其实就是另一个向量在这个向量上投影的长度。
    如下图,是高中我们学习过的余弦公式,即:
    A ⋅ B = ∣ A ∣ ∣ B ∣ c o s α A·B = |A||B|cosα AB=ABcosα
    其中 ∣ A ∣ |A| A为A的模,对于这里的二维向量, ∣ A ∣ = x 2 + y 2 |A|=\sqrt{x^2+y^2} A=x2+y2
    这里假设B的模 ∣ B ∣ |B| B等于1,则 A ⋅ B = ∣ A ∣ c o s α A·B = |A|cosα AB=Acosα,表示的就是向量A在向量B上的投影。
    在这里插入图片描述

  2. 基变换
    首先,什么是基?基是刻画向量的基本工具,向量空间的任意一个元素,都可以唯一的表示成基向量的线性组合(另外,基向量的模为1)。
    在这里插入图片描述
    知道什么是基向量之后,看下面这张图,在二维中,一般来说我们将 X 1 ( 1 , 0 ) T X_1(1,0)^T X1(1,0)T X 2 ( 0 , 1 ) T X_2(0,1)^T X2(0,1)T作为一组基,则在这组基中的点(3,2),其实是 3 X 1 + 2 X 2 3X_1+2X_2 3X1+2X2表示,那如果这里不使用 X 1 ( 1 , 0 ) T X_1(1,0)^T X1(1,0)T X 2 ( 0 , 1 ) T X_2(0,1)^T X2(0,1)T作为基向量,而使用 Y 1 ( 1 2 , 1 2 ) T Y_1(\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})^T Y1(2 1,2 1)T Y 2 ( − 1 2 , 1 2 ) T Y_2(-\frac{1}{\sqrt{2}},\frac{1}{\sqrt{2}})^T Y2(2 1,2 1)T这个向量组合作为基向量的话,则点的坐标应该为:
    在这里插入图片描述
    那原始基中的点(1,1)、(2,2)、(3,3)在这组基中的表示应该为:
    在这里插入图片描述
    于是,我们可以得到,我们有M个N维向量,想将其变换为由R个N维向量表示的新空间中,那么首先将R个基按行组成矩阵A,然后将向量按列组成矩阵B,那么两矩阵的乘积AB就是变换结果,其中AB的第m列为A中第m列变换后的结果,即:
    在这里插入图片描述
    其中 p i p_i pi是一个行向量,表示第 i i i个基, a j a_j aj是一个列向量,表示第 j j j个原始数据记录。
    特别要注意的是,这里R可以小于N,而R决定了变换后数据的维数。也就是说,我们可以将一N维数据变换到更低维度的空间中去,变换后的维度取决于基的数量。因此这种矩阵相乘的表示也可以表示降维变换。

  3. 特征分解
    特征分解,在机器学习中经常出现,这里简单的说一下。

    • 特征值
      如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式:
      A v = λ v Av=\lambda v Av=λv
      这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。
    • 特征分解
      特征值分解是将一个矩阵分解成下面的形式:
      A = Q Σ Q T A=Q\Sigma Q^T A=QΣQT
      其中Q是这个矩阵A的特征向量组成的矩阵,正交矩阵是可逆的。 Σ = d i a g ( λ 1 , λ 2 , . . . , λ n ) Σ = diag(λ_1, λ_2, ..., λ_n) Σ=diag(λ1,λ2,...,λn)是一个对角阵,每一个对角线上的元素就是一个特征值。
  4. 奇异值分解
    特征值分解是提取矩阵特征很不错的方法,但是它只适用于方阵。而在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有M个学生,每个学生有N科成绩,这样形成的一个M * N的矩阵就可能不是方阵,我们怎样才能像描述特征值一样描述这样一般矩阵呢的重要特征呢?奇异值分解就是用来干这个事的,奇异值分解是一个能适用于任意的矩阵的一种分解的方法。
    在这里插入图片描述
    在这里插入图片描述

三、PCA公式推导
3.1、方法一
到现在我们已经知道通过矩阵相乘可以对数据进行降维,并且前面讲到PCA的目的是降维之后,最大程度的保留数据的特征,那么如果选择基向量矩阵,才能使变换之后的数据的特征最大程度的得以保留呢?
其实是需要两个条件:

  • 投影之后数据的特征尽量保留,即数据的方差要越大越好
  • 投影之后各维度之间需要线性无关,因此数据之间的协方差为0
    在这里插入图片描述

那么到这里,我们只需要将协方差矩阵的对角线元素化为0即可,然后将对角线元素从大到小排列。假设原始协方差矩阵 C = 1 m X X T C=\frac{1}{m}XX^T C=m1XXT,并且 Y = P X Y=PX Y=PX,则有:

S = 1 m Y Y T = 1 m ( P X ) ( P X ) T = 1 m P X X T P T = 1 m P ( X X T ) P T S=\frac{1}{m}YY^T=\frac{1}{m}(PX)(PX)^T=\frac{1}{m}PXX^TP^T=\frac{1}{m}P(XX^T)P^T S=m1YYT=m1(PX)(PX)T=m1PXXTPT=m1P(XXT)PT

X X T XX^T XXT进行特征分解,得到 X X T = Q D Q T XX^T=QDQ^T XXT=QDQT,其中Q为特征分解产生的特征向量组成的向量,而D是特征值组成的对角阵。带入上式得到:

S = 1 m Y Y T = 1 m P ( X X T ) P T = 1 m P Q D Q T P T = ( P Q ) D ( P Q ) T S=\frac{1}{m}YY^T=\frac{1}{m}P(XX^T)P^T=\frac{1}{m}PQDQ^TP^T=(PQ)D(PQ)^T S=m1YYT=m1P(XXT)PT=m1PQDQTPT=(PQ)D(PQ)T

到这里,如何保证 Y Y T YY^T YYT的结果为一个对称矩阵呢,即只要上面公式可以特征分解即可,我们知道D为 X X T XX^T XXT的特征值组成的向量,那么这里最简单的方法就是假设 ( P Q ) = I (PQ)=I (PQ)=I,则可以保证 Y Y T YY^T YYT的结果为一个对称矩阵。即 P = Q T P=Q^T P=QT

这里我们就得到PCA的过程了,由于Q是 X X T XX^T XXT特征向量组成的,因此降维到k维时,找到 X X T XX^T XXT最大的k个特征值对应的特征向量,然后就可以得到变换矩阵P,从而得到降维之后的数据。

3.2、方法二
现在使用另外一种分析思路,得到相同的结果。
如下图,我们要将 x k x_k xk投影到向量 e e e上得到 x k 、 x_k^、 xk,其中 α k α_k αk表示的是投影之后的长度,则有:
α k = e T x k α_k=e^Tx_k αk=eTxk
且假设向量:
∣ ∣ e ∣ ∣ = 1 ||e||=1 e=1
则:
x k 、 = α k e x_k^、=α_ke xk=αke
在这里插入图片描述
我们可以理解这个过程中距离越短,则数据特征损失越少,则目标函数为:
m i n J ( e ) = ∑ i = 1 n ∣ ∣ x k 、 − x k ∣ ∣ 2 minJ(e)=\sum_{i=1}^n||x_k^、-x_k||^2 minJ(e)=i=1nxkxk2
由于:
在这里插入图片描述
由于 x x x已知,因此假设 S = ∑ i = 1 n x k x k T S=\sum_{i=1}^nx_kx_k^T S=i=1nxkxkT,则目标函数为:
在这里插入图片描述
到这里,就可以采用拉格朗日乘子法求解了:
在这里插入图片描述
由于 S e = λ e Se=\lambda e Se=λe,因此 λ \lambda λ就是 S = X X T S=XX^T S=XXT的特征值,所以,我们得到了同样的结论。

至此完成了PCA的数学原理推导。

四、PCA缺陷
上面我们介绍PCA的时候,你可能会发现一个问题,如果我们对数据降维之后需要做分类预测,但是PCA对数据降维的过程中,没有考虑到数据类别的问题。这可能造成数据在降维之后无法区分类别了。
比如下图,如果往 Y Y Y轴方向降维,降维之后会发现无法区分数据。那能否做到让数据按照分类降维呢?答案是可以的,使用线性判别分析(LDA)方法即可,下一次我们将分享LDA降维方法。
在这里插入图片描述

参考资料:
https://blog.csdn.net/xiaojidan2011/article/details/11595869
https://www.bilibili.com/video/av38471473/?p=6&t=1353
https://www.cnblogs.com/fuleying/p/4466326.html
https://blog.csdn.net/jinshengtao/article/details/18448355


http://chatgpt.dhexx.cn/article/7BIvT5Kj.shtml

相关文章

主成分分析原理详解

本博客前三节参考https://blog.csdn.net/program_developer/article/details/80632779 至于协方差矩阵的公式推导参考 http://blog.codinglabs.org/articles/pca-tutorial.html 1、背景 在许多领域的研究与应用中,通常需要对含有多个变量的数据进行观测&#xff0…

主成分分析原理及Python实现

主成分分析(Principal Components Analysis, PCA)是一种常用的数据分析手段,是图像处理过程中常用到的降维方法。对于一组不同维度之间可能存在线性相关关系的数据,PCA能够把这组数据通过正交变换变成各个维度之间线性无关的数据&…

主成分分析原理以及SPSS和Python实现

目录 [ 0 ] 一句话定义[ 1 ] 使用目的和使用条件[ 2 ] 基本思想和直观理解[ 3 ] 具体计算步骤[ 4 ] 求各个成分的累计贡献率[ 5 ] 主成分分析的SPSS和Python实现SPSS实现相关设置结果分析 Python实现 [ 6 ] 总结 [ 0 ] 一句话定义 主成分分析(principal component analysis,PCA…

主成分分析原理

文章目录 一、主成分操作步骤二、spss里面的设置三、一些概念的解释 一、主成分操作步骤 1、为消除量纲的影响,先对数据进行标准化处理; 2、计算相关系数:一般认为各变量之间的相关系数大于0.3较好; 3、KMO检验和Barlett&#…

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

PCA: Principal Components Analysis,主成分分析法原理 1、引入 PCA算法是无监督学习专门用来对高维数据进行降维而设计,通过将高维数据降维后得到的低维数能加快模型的训练速度,并且低维度的特征具有更好的可视化性质。另外&…

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

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

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

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

win10+tensorflow1.14+cuda10安装踩坑

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

Win10 下载torch以及CUDA配置

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

Ubuntu 18.10 下安装CUDA10/CUDA10.1

GPU:GeForce840M 显卡驱动:预装,版本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

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

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

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

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

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

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

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

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

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

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

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

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

文章目录 0 前沿1 显卡驱动和CUDA安装2 TensorRT3 Opencv3 0 前沿 目前TensorRT已经升级到TensorRT7.2版本,开始需要Cuda11cudnn8支持(7.1版本也有10.2版本),这里简单记录以下安装流程及个别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、万事大吉,只欠重启 四、一些后事 问题1:安装过程中电脑自动重启。 问题2&…

cuda9升级cuda10方法记录 ubuntu1604

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

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 网页打开之后是…