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

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

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

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

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

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

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

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

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

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

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

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

目标:x = ( x 1 , x 2 , . . . , x p ) T \bm{x}=(x_1,x_2,…,x_p)^T x =(x 1 ​,x 2 ​,…,x p ​)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 y i ​=αi T ​x =α1 i ​x 1 ​+α2 i ​x 2 ​+…+αp i ​x p ​其中,α i T = ( α 1 i , α 2 i , . . . , α p i ) \alpha_i^T=(\alpha_{1i},\alpha_{2i},…,\alpha_{pi})αi T ​=(α1 i ​,α2 i ​,…,αp i ​),从而将 x \bm{x}x 转变为 p p p 维随机变量 y \bm{y}y,使得满足以下条件:

  • 系数向量α i T \alpha_i^T αi T ​ 是单位向量,即α i T α i = 1 \alpha_i^T\alpha_i=1 αi T ​αi ​=1
  • 变量y i y_i y i ​与y j y_j y j ​互不相关
  • y 1 y_1 y 1 ​是x x x所有线性变换中方差最大的,y 2 y_2 y 2 ​是与y 1 y_1 y 1 ​不相关的x x x的所有线性变换中方差最大的……y i y_i y i ​是与y 1 , y 2 , . . . , y i − 1 y_1,y_2,…,y_{i-1}y 1 ​,y 2 ​,…,y i −1 ​都不相关的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 y k ​=αk T ​x =α1 k ​x 1 ​+α2 k ​x 2 ​+…+αm k ​x m ​ 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 v a r (y k ​)=αk T ​Σαk ​=λk ​即协方差矩阵 Σ \Sigma Σ 的第 k k k个特征值。

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

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

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

这里规定一些符号:

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

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

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

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

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

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

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

SPSS实现

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

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

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

Python实现

import pandas as pd
import numpy as np
from sklearn.decomposition import PCA

data=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_) # 输出前两个主成分的方差贡献率

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

Original: https://blog.csdn.net/codelady_g/article/details/123586708
Author: StarryNight
Title: 主成分分析原理以及SPSS和Python实现

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/699616/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球