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

article/2025/9/11 1:06:14

目录

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

[ 0 ] 一句话定义

主成分分析(principal component analysis,PCA) 是一种常用的无监督学习方法,它利用正交变换把由线性相关变量表示的观测数据转换为少数几个由线性无关变量表示的数据,线性无关的变量叫主成分,主成分个数主一般小于原始变量个数,所以它是一种降维方法。主成分分析主要用于发现数据中的基本结构,即数据中变量之间的基本关系,是一种描述性统计方法,常常用于其他机器学习方法的前处理。
——李航《统计学习方法》

[ 1 ] 使用目的和使用条件

统计分析中,变量之间可能存在相关性,以致增加了分析的难度,因而人们探索 降维 的可能性,用原始变量构造少数变量来代替多数变量,这样能保留数据中的大部分信息,同时简化了运算。

讨论: 为什么要降维/处理相关性?相关的数据难处理在哪?

从数据的意义上:举例来说,关于国家的描述有以下变量:人均收入、外汇储备、进出口贸易额等变量,这些变量不独立,反而可能十分相关,其中一个变量的自身变化往往伴随着其他变量不可忽略的变化,谈论单独某个变量对国家特征的单独贡献就没有意义,它们有着“集体贡献”,而总的贡献不是单独变量贡献之和。

从机器学习角度:要处理的数据可能有成百上千的变量,里面有与问题无关的变量,也有彼此相关的冗余变量,进行数据降维能够在较好地描述原始数据的基础上,减少计算时间,改善整体性能。机器学习的降维有两大类:
(1)特征选择:选择原始变量集的子集,不产生新的变量
(2)特征降维:生成了新的变量,如PCA

如上所述,PCA的使用条件就是变量之间存在相关性,如果是完全独立的,那么就没有做PCA的必要了。

[ 2 ] 基本思想和直观理解

把给定的一组变量 X 1 , X 2 , . . . , X p X_1,X_2,...,X_p X1,X2,...,Xp 通过线性变换转化为一组不相关的变量 Y 1 , Y 2 , . . . , Y p Y_1,Y_2,...,Y_p Y1,Y2,...,Yp,保持总方差不变,其中 Y 1 Y_1 Y1 具有最大方差,称为第一主成分,类似地,有第二、第三…第p主成分。方差表示在新变量上信息的大小。

为了直观展示,假设两维的情况。左图由于两个变量相关,呈现一个椭圆的形状,沿椭圆长轴方向包含更多的信息,即方差最大的方向,而短轴方向方差较小。右图是两个不相关变量,长短轴没有差别,近似于一个正圆,因而降维没有什么意义,因为无论向那个方向投影都不会有大的差别。

下面介绍具体的步骤,现在总结要关注的几个问题:

  • 如何将原始变量变换称线性无关的变量?
  • 这些成分代表了原来的多少信息?
  • 是否有可能解释这些成分?

[ 3 ] 具体计算步骤

我将省略一些推导和具体的计算,尽量表达出这个过程的思路,使得不需要太好的数学基础也能尽可能看懂。

目标 x = ( x 1 , x 2 , . . . , x p ) T \bm{x}=(x_1,x_2,...,x_p)^T x=(x1x2,...,xp)T p p p 维随机变量,定义一个线性变换 y i = α i T x = α 1 i x 1 + α 2 i x 2 + . . . + α p i x p y_i=\alpha_i^T\bm{x}=\alpha_{1i}x_1+\alpha_{2i}x_2+...+\alpha_{pi}x_p yi=αiTx=α1ix1+α2ix2+...+αpixp其中, α i T = ( α 1 i , α 2 i , . . . , α p i ) \alpha_i^T=(\alpha_{1i},\alpha_{2i},...,\alpha_{pi}) αiT=(α1i,α2i,...,αpi),从而将 x \bm{x} x 转变为 p p p 维随机变量 y \bm{y} y,使得满足以下条件:

  • 系数向量 α i T \alpha_i^T αiT 是单位向量,即 α i T α i = 1 \alpha_i^T\alpha_i=1 αiTαi=1
  • 变量 y i y_i yi y j y_j yj互不相关
  • y 1 y_1 y1 x x x所有线性变换中方差最大的, y 2 y_2 y2是与 y 1 y_1 y1不相关的 x x x的所有线性变换中方差最大的…… y i y_i yi是与 y 1 , y 2 , . . . , y i − 1 y_1,y_2,...,y_{i-1} y1,y2,...,yi1都不相关的 x x x的所有线性变换中方差最大的

第一个条件表明线性变换是 正交变换 α 1 , α 2 , . . . , α p \alpha_1,\alpha_2,...,\alpha_p α1,α2,...,αp是一组标准正交基,第二、三个条件给出了求主成分的方法。那么,再具体一点,怎么求呢?

先要介绍一个定理:

x \bm{x} x p p p 维随机变量, Σ \Sigma Σ x \bm{x} x 的协方差矩阵, Σ \Sigma Σ 的特征值分别是 λ 1 ≥ λ 2 ≥ . . . ≥ λ p \lambda_1\geq\lambda_2\geq...\geq\lambda_p λ1λ2...λp,特征值对应的单位特征向量分别是 α 1 , α 2 , . . . , α m \alpha_1,\alpha_2,...,\alpha_m α1,α2,...,αm,则 x \bm{x} x 的第 k k k 主成分是 y k = α k T x = α 1 k x 1 + α 2 k x 2 + . . . + α m k x m y_k=\alpha_k^T\bm{x}=\alpha_{1k}x_1+\alpha_{2k}x_2+...+\alpha_{mk}x_m yk=αkTx=α1kx1+α2kx2+...+αmkxm x \bm{x} x的第 k k k 主成分的方差是 v a r ( y k ) = α k T Σ α k = λ k var(y_k)=\alpha_k^T\Sigma\alpha_k=\lambda_k var(yk)=αkTΣαk=λk即协方差矩阵 Σ \Sigma Σ 的第 k k k个特征值。

这个定理给出了求主成分的方法,即第一主成分 y 1 = α 1 T x y_1=\alpha_1^T\bm{x} y1=α1Tx, 只要求出系数向量 α 1 \alpha_1 α1即可。而求解 α 1 \alpha_1 α1是一个约束最优化问题,可以表达成如下形式,然后用拉格朗日乘子法求解。

max ⁡ α 1 α 1 T Σ α 1 \max\limits_{\alpha_1}\quad \alpha_1^T\Sigma\alpha_1 α1maxα1TΣα1 s . t . α 1 T α 1 = 1 s.t.\quad\alpha_1^T\alpha_1=1 s.t.α1Tα1=1同理,求第二主成分可以表达成以下约束最优化问题: max ⁡ α 2 α 2 T Σ α 2 \max\limits_{\alpha_2}\quad \alpha_2^T\Sigma\alpha_2 α2maxα2TΣα2 s . t . α 1 T Σ α 2 = 0 , α 2 T Σ α 1 = 0 s.t.\quad\alpha_1^T\Sigma\alpha_2=0, \alpha_2^T\Sigma\alpha_1=0 s.t.α1TΣα2=0,α2TΣα1=0 α 2 T α 2 = 1 \alpha_2^T\alpha_2=1 α2Tα2=1 这样就能够计算出所有的系数向量了,求解的过程在此省略。

注:实际问题中,由于变量的协方差矩阵未知,因而可以用样本协方差矩阵代替,同时为了避免受到量纲的影响,通常用样本相关阵 R \bm{R} R 代替样本协方差矩阵,这等价于用标准化数据的协方差矩阵(标准化后的数据各个变量的均值为0,方差为1)。

这里规定一些符号:

[ 4 ] 求各个成分的累计贡献率

一个成分的重要程度由其方差占总方差的比例来衡量。对于第 i i i 个成分,其方差为特征值 λ i \lambda_i λi(由上面的定理得到),总方差为 ∑ i = 1 p λ i \sum_{i=1}^p\lambda_i i=1pλi,则第 i i i 个成分贡献率为 λ i / ∑ i = 1 p λ i \lambda_i/\sum_{i=1}^p\lambda_i λi/i=1pλi

若使用样本相关阵,则计算出的特征向量 a i \bm{a_i} ai 都是单位向量,第 i i i 个主成分和第 j j j 个原始变量之间的相关系数为 l i a i j \sqrt{l_i}a_{ij} li aij,也就是—>

【第 i i i 个特征向量 a i \bm{a_i} ai】与【相应的特征值的平方根 l i \sqrt{l_i} li 】的乘积 的各个分量为【第 i i i 个主成分和各个原始变量之间的相关系数】

一些软件将 l i a i \sqrt{l_i}\bm{a_i} li ai 定义为载荷,而有的将单位特征向量 a i \bm{a}_i ai 定义为载荷。所谓 “载荷” 就是 “变量在主成分上的载荷”,也就是原始变量与主成分之间的相关系数。

这里有两个常用的工具:碎石图载荷图

碎石图描述了各个成分的贡献率及累计贡献率的变化。

载荷图描述主成分和原始变量的相关系数,每一点的横坐标为相应变量和第一主成分的相关系数,纵坐标为其与第二主成分的相关系数。

[ 5 ] 主成分分析的SPSS和Python实现

SPSS实现

相关设置

【分析】—【降维】—【因子分析】— 选择变量

结果分析

相关性矩阵描述变量之间的相关性,例如利润和创汇之间相关性很高,相关系数为0.871.

提取出四个主成分,前两个主成分的方差解释率已经达到了90.772%,保留了大部分的信息。

Python实现

import pandas as pd
import numpy as np
from sklearn.decomposition import PCAdata=pd.read_csv(r'C:\Users\Lenovo\Desktop\PCA.csv')X=np.array(data)pca=PCA(n_components=2)   # 设置主成分个数为2
pca.fit(X)    
print(pca.explained_variance_ratio_) # 输出前两个主成分的方差贡献率

[ 6 ] 总结

如果有一组数据,一共有 k 个变量,对其进行主成分分析,一般过程应当是:

  1. z-score标准化,消除量纲的影响
  2. 求出变量之间的相关系数矩阵 R k × k R_{k×k} Rk×k
  3. 求R的特征根,并按从大到小排列 λ 1 , λ 2 , . . . λ k \lambda_1,\lambda_2,...\lambda_k λ1,λ2,...λk,并求出其一组长度为1,相互正交的特征向量 b 1 , b 2 , . . . , b k b_1,b_2,...,b_k b1,b2,...,bk
  4. λ 1 , λ 2 , . . . λ q ( q < k ) \lambda_1,\lambda_2,...\lambda_q(q<k) λ1,λ2,...λq(q<k),计算 Y 1 = b 1 X T , . . . . , Y q = b q X T Y_1=b_1X^T,....,Y_q=b_qX^T Y1=b1XT,....,Yq=bqXT,即为所求

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

相关文章

主成分分析原理

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

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

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

【数据处理方法】主成分分析(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、确定…