PCA 主成分分析


主成分分析(principal component analysis,PCA​​​​)是无监督学习方法。该方法将原来由线性相关变量表示的数据,通过正交变换,变成少数由线性无关的新变量表示的数据,线性无关的变量称为主成分。

PCA​​​​ 的变量个数通常小于原始变量的个数,属于降维方法。



一、总体主成分分析


1、基本思想


1.1、步骤

① 数据规范化处理(使数据在每一变量的平均值为0,方差为1)。

正交变换,即乘以正交矩阵,得到新变量(新坐标轴),新变量线性无关。(新变量是所有正交变换中,变量的方差和最大的)。


1.2、PCA​​ 直观解释

数据规范化处理后分布在原点附近(如图 a​)。

对原坐标系中的数据进行主成分分析等价于进行坐标系旋转变换(如图 b​)。

将数据投影到新坐标系的坐标轴上,PCA​​​​ 选择方差和最大的方向为新坐标系的第一坐标轴(第一主成分),依次类推。

例如:

a​​ 中,数据由变量 x1​​、x2​​​​表示,每个点表示一个样本。很明显变量 x1​​、x2​​ 是线性相关的(即已知变量 x1​​,对变量 x2​​​ 预测不是完全随机的)。

b​​​​ 中,通过正交变换,数据由变量 y1​​​​、y2​​​​ 表示,PCA​​​​ 选择方差和最大的方向为第一坐标轴,即 y1​​​​ 轴;之后选择与第一坐标轴正交,且方差和次之的方向为第二坐标轴,即 y2​​​​ 轴。此时变量 y1​​​​、y2​​​​ 是线性无关的。(即已知变量 y1​​​​,对变量 y2​​​​​ 预测是完全随机的)。

主成分分析只取第一主成分时将二维数据压缩成一维。


1.3、方差最大的解释

如图 16.2,变量 x1x2,样本点 ABC,对坐标系旋转变换,得到新的坐标轴 y1,表示新的变量 y1

样本点 ABCy1 轴的投影 ABC,样本在变量 y1 上的方差和 OA2+OB2+OC2。主成分分析旨在选取正交变换中方差和最大的变量,作为第一主成分。

注意 OA2+OB2+OC2 不变, OA2+OB2+OC2 最大等价于 AA2+BB2+CC2​ 最小。所以样本点在新变量上的方差和最大等价于样本点在新坐标轴上的投影尽可能的分开到新坐标轴的距离足够近

在数据总体上进行主成分分析,是总体主成分分析;

在有限样本上进行主成分分析,是样本主成分分析。



2、定义和导出

假设 xx=(x1,x2,...,xm)T​​​ 是 m​​​ 维随机变量,其均值向量是 μμ​​( 均值向量,随机向量的数学期望。)​:

μμ=E(xx)=(μ1,μ2,...,μm)T

协方差矩阵 Σ

Σ=cov(xx,xx)=E[(xxμμ)(xxμμ)T]

考虑由 m​ 维随机变量 xx​ 到 m​ 维随机变量 yy=(y1,y2,...,ym)T​ 的线性变换

(1)yi=αiTxx=k=1mαkixk=α1ix1+α2ix2+...+αmixm

其中 αiT=(α1i,α2i,...,αmi),  i=1,2,..,m​。

由随机变量的性质可知:

(2)E(yi)=αiTμμ    i=1,2,...,m(3)var(yi)=αiTΣαi    i=1,2,...,m(4)cov(yi,yj)=αiTΣαj    i=1,2,...,m    j=1,2,...,m


1xx=[45346213],求 Σ

解:

μμ=E(xx)=[44443333]

Σ=cov(xx,xx)=E[(xxμμ)(xxμμ)T]=141[01103120][03111200]=13[21114]=[0.6670.3330.3334.667]

import numpy as np

x = np.array([[4, 5, 3, 4],
              [6, 2, 1, 3]])
print(np.cov(x))		# 求协方差矩阵
[[0.66666667 0.33333333]
 [0.33333333 4.66666667]]

2.1、总体主成分

给定式 (1) 的线性变换满足下列条件,称为总体主成分

(1)系数向量 αiT 是单位向量,即 αiTαi=1   i=1,2,...,m

(2)变量 yiyj 互不相关,即 cov(yi,yj)=0(ij)

(3)变量 y1xx 的所有线性变换中方差最大的;y2 是与 y1 不相关的 xx 所有线性变化中方差最大的;一般,yi 是与 y1,y2,...,yi1  (i=1,2,...,m)都不相关的 xx 的所有线性变换中方差最大的;这时分别称 y1,y2,...,ymxx 的第一主成分、第二主成分、...、第 m 主成分。


条件 (1)​ 表明线性变换是正交变换,α1,α2,...,αm 是其一组标准正交基

αiTαj={1,i = j0,i ≠ j

条件 (2)(3) 给出求主成分的方法:

第一步,在 xx 的所有线性变换

αiTxx=i=1mαi1xi

中,在 α1Tα1=1​​ 条件下,求方差最大的,得到 xx​​ 的第一主成分;

第二步,在 α1Txx 不相关的 xx​ 的所有线性变换

α2Txx=i=1mαi2xi

中,在 α2Tα2=1 条件下,求方差最大的,得到 xx 的第二主成分;

k 步,在与 α1Txx,α2Txx,...,αk1Txx​ 不相关的 xx 的所有线性变换

αkTxx=i=1mαikxi

中,在 αkTαk=1​​ 条件下,求方差最大的,得到 xx​​ 的第 k 主成分;

如此继续下去,得到 xx 的第 m 主成分。



3、主要性质

定理: xxm 维随机变量,Σxx 的协方差矩阵(即特征向量),Σ 的特征值是 λ1λ2...λm0,特征值对应的单位特征向量是 α1α2,...,αm,则 xx 的第 k 主成分是

(5)yk=αkTxx=α1kx1+α2kx2+...+αmkxm,    k=1,2,...,m

xx 的第 k 主成分的方差是协方差矩阵 Σ 的第 k 个特征值。

(6)var(yk)=αkTΣαk=λk,    k=1,2,...,m

性质:

① 主成分 yy 的协方差矩阵是对角矩阵

(7)cov(yy)=Λ=diag(λ1,λ2,...,λm)

其中 λkΣ 的第 k 个特征值,αk 是对应的单位特征向量,k=1,2,...,m

② 主成分 yy 的方差之和是等于随机变量 xx 的方差之和

(8)i=1mλi=i=1mσii

其中 σiixi 的方差,即协方差矩阵 Σ 的对角线元素。

③ 主成分 yk 与变量 xi 的相关系数 ρ(yk,xi) 称为因子负荷量,表示第 k 个主成分 yk 与变量 xi 的相关关系,即 ykxi 的贡献率。

(9)ρ(yk,xi)=λkαikσii,    k,i=1,2,...,m



二、样本主成分分析

样本主成分分析是基于样本协方差矩阵的主成分分析。

给定样本矩阵

X=[x1x1 x2x2  xnxn]=[x11x12x1nx21x22x2nxm1xm2xmn]

其中 xxj=(xij,x2j,,xmj)Txx 的第 j 个独立观测样本,j=1,2,...,n

X 的样本协方差矩阵

S=[Sij]m×m,    sij=1n1k=1n(xikx¯i)(xjkx¯j))i=1,2,...,m,    j=1,2,...,m

其中 x¯i=1nk=1nxik

给定样本数据矩阵 X,考虑向量 xxyy 的线性变换

yy=ATxx

这里

A=[a1a1 a2a2  amam]=[a11a12a1ma21a22a2mam1am2amm]

如果该线性变换满足下列条件,称为样本主成分

样本第一主成分 y1=a1Txx 是在 a1Ta1=1 条件下,使得 a1Txxj  (j=1,2,...,n) 的样本方差 a1TSa1 最大的 xx 的线性变换;

样本第二主成分 y2=a2Txx 是在 a2Ta2=1a2Txja1Txj  (j=1,2,...,n) 的样本协方差 a1TSa2=0 条件下,使得 a2Txxj  (j=1,2,...,n) 的样本协方差 a2TSa2 最大的 x 的线性变换;

样本第 i 主成分 yi=aiTx 是在 aiTai=1aiTxjxjakTxxj  (k<i, j=1,2,...,n) 的样本协方差 akTSai=0 条件下,使得 aiTxxj (j=1,2,...,n) 的样本方差 aiTSai 最大的 xx 的线性变换。



三、PCA 两种实现方法

PCA 主要有两种,通过相关矩阵的特征值分解样本矩阵的奇异值分解进行。(相关矩阵指将样本矩阵标准化后再求其相关系数矩阵。)

① 相关矩阵的特征值分解。

针对 m×n 样本矩阵 X,求相关矩阵

R=1n1XXT

求相关矩阵的 k 个特征值和特征向量,构造正交矩阵

V=(v1,v2,...,vk)

V 的每一列对应一个主成分,得到 k×n​ 样本主成分矩阵

Y=VTX

② 样本矩阵的奇异值分解。

针对 m×n 样本矩阵 X

X=1n1XT

对矩阵 X 进行截断奇异值分解,保留 k 个奇异值、奇异向量,得到

X=USVT

V 的每一列对应一个主成分,得到 k×n 样本主成分矩阵 Y

Y=VTX


2 n 个学生参加 4 门考试,将考试成绩看作随机变量的取值,进行标准化处理,得到矩阵 R

课程 语文 外语 数学 物理
语文 1 0.44 0.29 0.33
外语 0.44 1 0.35 0.32
数学 0.29 0.35 1 0.60
物理 0.33 0.32 0.60 1

对数据进行主成分分析。

解: x1,x2,x3,x4 表示语、外、数、物。

① 求矩阵的特征值,按大小排序,

λ1=2.17    λ2=0.87    λ3=0.57    λ4=0.39

import numpy as np

a = np.array([[1, 0.44, 0.29, 0.33],
             [0.44, 1, 0.35, 0.32],
             [0.29, 0.35, 1, 0.6],
             [0.33, 0.32, 0.6, 1]])
w, v = np.linalg.eig(a)     # 求矩阵的特征值和特征向量
print(w)
[2.17016506 0.87100546 0.56617908 0.3926504 ]

这些特征值是主成分的方差贡献率。累积方差大于 75%,只需前两个主成分,即 k=2

λ1+λ2i=14λi=0.76

② 求 λ1λ2特征向量;方差贡献率

项目 x1 x2 x3 x4 方差贡献率
y1 0.460 0.476 0.523 0.537 2.172.17+0.87+0.57+0.39=0.543
y2 0.574 0.486 -0.476 -0.456 0.872.17+0.87+0.57+0.39=0.218
print(v)		# Python处理自带的误差

[[-0.45990769 -0.56790937 -0.6665586  -0.14718523]
 [-0.4763124  -0.49090704  0.71535364  0.14284941]
 [-0.52874972  0.47557056  0.11286206 -0.69391536]
 [-0.53106981  0.45860862 -0.17672284  0.69022607]]

按照式 (5) 得第一、第二主成分:

y1=0.460x1+0.476x2+0.523x3+0.537x4y2=0.574x1+0.486x20.476x30.456x4

③ 求主成分的因子负荷量,贡献率,

项目 x1 x2 x3 x4
y1 0.678 0.701 0.770 0.791
y2 0.536 0.453 -0.444 -0425
y1y2x1 的贡献率 0.747 0.679 0.790 0.806

规范化随机变量 xi 与主成分 yi 的相关系数(因子负荷量)为

ρ(yk,xi)=λkeik    k,i=1,2,...,m

其中 ek=(e1k,e2k,...,emk)T 为矩阵对应特征值 λk 的单位特征向量。

e1=(e11,e21,e31,e41)=(0.46,0.476,0.523,0.537)ρ(y1,x1)=λ1e11=2.17×0.460=0.678ρ(y1,x2)=λ1e21=2.17×0.476=0.701e2=(e12,e22,e32,e42)=(0.574,0.486,0.476,0.456)ρ(y2,x1)=λ2e12=0.87×0.574=0.536ρ(y2,x2)=λ2e22=0.87×0.486=0.453

第一、第二主成分对变量 xi 的贡献率,

k 个主成分 y1,y2,...,yk 对原有变量 xi 的贡献率定义为 xi(y1,y2,...,yk) 的相关系数的平方,记作 vi

vi=ρ2(xi,(y1,y2,...,yk))

计算公式:

vi=ρ2(xi,(y1,y2,...,yk))=j=1kρ2(xi,yi)=j=1kλjαij2σii

v1=j=12ρ2(x1,yi)=ρ2(x1,y1)+ρ2(x1,y2)=0.6782+0.5362=0.747v2=j=12ρ2(x2,yi)=ρ2(x2,y1)+ρ2(x2,y2)=0.7012+0.4532=0.679v3=j=12ρ2(x3,yi)=ρ2(x3,y1)+ρ2(x3,y2)=0.790v4=j=12ρ2(x4,yi)=ρ2(x4,y1)+ρ2(x4,y2)=0.806

从上表可以看出,

第一主成分 y1 对应的因子负荷量 ρ(y1,xi), i=1,2,3,4, 均为正数,表明各门成绩提高都使 y1 提高,也就是说,第一主成分 y1 反映学生的整体成绩。还可以看出,因子负荷量的数值相近,且 ρ(y1,x4) 的值最大,这表明物理成绩在整体成绩中占最重要位置。

第二主成分 y2 对应的因子负荷量 ρ(y2,xi), i=1,2,3,4,有正有负,正的是语文、外语,负的是数学、物理 ,表明文科成绩提高可使 y2 提高,理科成绩提高可使 y2 降低, 也就是说,第二主成分 y2 反映文科成绩与理科成绩的关系

下图是因子负荷量分布图,将原变量 x1,x2,x3,x4(语文、外语、数学、物理)和主成分 y1,y2(整体成绩、文科对理科成绩)的因子负荷量在平面坐标系中表示。可以看出变量之间的关系,4 个原变量聚成了两类:因子负荷量相近的语文、外语为一类,数学、物理为一类,前者反映文科成绩,后者反映理科成绩。



posted @   做梦当财神  阅读(1924)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示