前置知识点:SVD(Singular Value Decomposition)

定义

假设x=(x1,x2,,xm)Tx = (x_{1},x_{2},\dots,x_{m})^Tmm维随机变量,其均值变量是μ\mu,协方差矩阵是Σ\Sigma,考虑到由mm维随机变量xx到由mm维随机变量yy的线性变换:

yi=αiTx=α1ix1++αmixm\begin{align} y_{i} = \alpha_{i}^T x = \alpha_{1i}x_{1} + \cdots + \alpha_{mi}x_{m} \end{align}

由随机变量的性质:

E(yi)=αiTμvar(yi)=αiTΣαicov(yi,yj)=αiTΣαj\begin{align} & E(y_{i}) = \alpha_{i}^T \mu \\ & \mathrm{var}(y_{i}) = \alpha_{i}^T \Sigma \alpha_{i} \\ & \mathrm{cov}(y_{i},y_{j}) = \alpha_{i}^T \Sigma \alpha_{j} \end{align}

总体主成分分析

给定一个如式(1)所示的线性变换,如果他们满足以下条件:

  • 系数变量αiT\alpha_{i}^T是单位向量,即αiTαi=1\boldsymbol{\alpha_{i}^T \alpha_{i}} = 1
  • cov(yi,yj)=0\mathrm{cov}(y_{i},y_{j}) = 0
  • 变量 y1y_{1}x\boldsymbol{x} 的所有线性变换中方差最大的;y2y_{2} 是与 y1y_{1} 不相关的 x\boldsymbol{x} 的所有线性变换中方差最大的;一般地,yiy_{i} 是与 y1,y2,,yi1(i=1,2,,m)y_{1}, y_{2}, \cdots, y_{i-1}(i=1,2, \cdots, m) 都不相关的 x\boldsymbol{x} 的所有线性变换中方差最大的,这时分别称 y1,y2,,ymy_{1}, y_{2}, \cdots, y_{m}x\boldsymbol{x} 的第一主成分,第二主成分,\cdots\cdots,第 mm 主成分。

样本主成分分析

一般的,样本第ii主成分yi=αiTxy_{i} = \boldsymbol{\alpha_{i}^T x}是在aiTai=1\boldsymbol{a}_{i}^{\mathrm{T}} \boldsymbol{a}_{i}=1aiTxj\boldsymbol{a}_{i}^{\mathrm{T}} \boldsymbol{x}_{j}akTxj(k<i,j=1,2,,n)\boldsymbol{a}_{k}^{\mathrm{T}} \boldsymbol{x}_{j}(k<i, j=1,2, \cdots, n)的样本协方差akTSai=0\boldsymbol{a}_{k}^{\mathrm{T}} \boldsymbol{S} \boldsymbol{a}_{i}=0条件下,使aiTxj(j=1,2,,n)\boldsymbol{a}_{i}^{\mathrm{T}} \boldsymbol{x}_{j}(j=1,2, \cdots, n)的样本方差aiTSai\boldsymbol{a}_{i}^{\mathrm{T}} \boldsymbol{S} \boldsymbol{a}_{i}最大的x\boldsymbol{x}的线性变换。

样本主成分分析与总体主成分分析具有相同的性质。样本协方差矩阵S\boldsymbol{S}是总体协方差矩阵Σ\boldsymbol{\Sigma}的无偏估计,样本相关矩阵R\boldsymbol{R}是总体相关矩阵的无偏估计,S\boldsymbol{S}的特征值和特征向量是Σ\boldsymbol{\Sigma}的特征值和特征向量的最大似然估计。

主成分分析的计算及应用

主成分分析的计算

mm维随机变量y=(y1,y2,,ym)\boldsymbol{y} = (y_{1},y_{2},\cdots,y_{m})的分量依次是x\boldsymbol{x}的第一主成分到第mm主成分的充要条件是:

  • y=ATx\boldsymbol{y = A^T x},A\boldsymbol{A}是正交矩阵:

[α11α12α1mα21α22α2mαm1αm2αmm]\left[ \begin{matrix} \alpha_{11} & \alpha_{12} & \cdots &\alpha_{1m} \\ \alpha_{21} & \alpha_{22} & \cdots &\alpha_{2m} \\ \vdots & \vdots & & \vdots \\ \alpha_{m1} & \alpha_{m2} & \cdots &\alpha_{mm} \\ \end{matrix} \right]

  • y\boldsymbol{y}的协方差矩阵为对角矩阵:

cov(y)=diag(λ1,λ2,,λm)λ1λ2λm\begin{align} &\mathrm{cov}(\boldsymbol{y}) = \mathrm{diag}(\lambda_{1},\lambda_{2},\cdots,\lambda_{m}) \\ &\lambda_{1} \geq \lambda_{2} \geq \cdots \geq \lambda_{m}\\ \end{align}

其中,λk\lambda_{k}Σ\boldsymbol{\Sigma}的第kk个特征值,αk\alpha_{k}是对应的单位特征向量,k=1,2,,mk = 1,2,\cdots,m,用矩阵可以表示为:

ΣA=AΛ\begin{align} &\boldsymbol{\Sigma A = A \Lambda} \end{align}

主成分的个数

对于任意正整数 q,1qmq, 1 \leq q \leq m,考虑正交线性变换

y=BTx\begin{align} \boldsymbol{y = B^T x} \end{align}

其中,y\boldsymbol{y}qq 维向量,BT\boldsymbol{B^T}q×mq \times m 矩阵,令y\boldsymbol{y}的协方差矩阵为

Σy=BTΣB\begin{align} \boldsymbol{\Sigma_y = B^T \Sigma B} \end{align}

Σy\boldsymbol{\Sigma_y} 的迹 tr(Σy)\mathrm{tr}(\boldsymbol{\Sigma_y})B=Aq\boldsymbol{B = A_q} 时取得最大值,其中矩阵 Aq\boldsymbol{A_q} 由正交矩阵 A\boldsymbol{A} 的前 qq 列组成。

主成分的方差贡献率

kk 主成分 yky_{k} 的方差贡献率定义为 yky_{k} 的方差与所有方差之和的比,记作 ηk\eta_k:

ηk=λki=1mλi\begin{align} \eta_k = \frac{\lambda_k}{\sum_{i=1}^{m} \lambda_i} \end{align}

对于主成分 y1,y2,,yky_1, y_2, \cdots, y_k,其累计方差贡献率定义为从方差之和和所有方差之和的比:

ηk=i=1kλii=1mλi\begin{align} \eta_k = \frac{\sum_{i=1}^{k} \lambda_i}{\sum_{i=1}^{m} \lambda_i} \end{align}

通常取 kk 使得累计方差贡献率达到规定的百分比以上,如 70%~80% 以上。累计方差贡献率反映了主成分保留的信息比例,但它不能反映对某个原有变量 xix_i 保留信息的比例,这时可以通过主成分 y1,y2,,yky_1, y_2, \cdots, y_k 对原变量 xix_i 的贡献率。

主成分对原有变量的贡献率

kk 主成分 y1,y2,,yky_1, y_2, \cdots, y_k 对原变量的贡献率与 (x1,x2,,xk)(x_1, x_2, \cdots, x_k) 的相关系数的平方,记作:

vi=ρ2(xi,y1,y2,,yk)\begin{align} v_i = \rho^2 (x_i, y_1, y_2, \cdots, y_k) \end{align}

计算公式如下:

vi=ρ2(xi,y1,y2,,yk)=j=1kρ2(xi,yj)=j=1kλjQij2\begin{align} v_i = \rho^2 (x_i, y_1, y_2, \cdots, y_k) = \sum_{j=1}^{k} \rho^2 (x_i, y_j) = \sum_{j=1}^{k} \lambda_j Q_{ij}^2 \end{align}

主成分分析结果解读

本部分摘自什么是主成分分析 (PCA)?

主成分分析 (PCA) 图是使用前两个主成分作为轴创建的散点图。x 轴为第一主成分 (PC1),y 轴为第二主成分 (PC2)。散点图显示了观测值(数据点)和新变量(主成分)之间的关系。每个点的位置显示该观测的 PC1 和 PC2 值。

绘图箭头的方向和长度指示变量的载荷,即每个变量对主成分的贡献。如果一个变量对于特定成分具有高载荷,则它与该成分具有强相关性。这可以突出显示哪些变量对数据变化有重大影响。

应用主成分分析 (PCA) 后剩余的主成分数量可帮助解释数据输出。第一个主成分解释最大的数据方差,后面每个成分解释更小的方差。因此,成分的数量可以表示从原始数据集中保留的信息量。应用主成分分析 (PCA) 后,成分越少可能意味着您没有捕捉到太多的数据变化。成分越多表示数据变化越多,但结果可能更难解释。您可以使用碎石图或累积解释方差来确定要保留成分的最优数量。

主成分分析实战——以MNIST数据集为例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.datasets import fetch_openml
from sklearn.preprocessing import StandardScaler

# 加载MNIST数据集
mnist = fetch_openml("mnist_784")
X, y = mnist["data"], mnist["target"].astype(int)

# 标准化数据(PCA前通常需要标准化)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 显示每个标签的主成分(展示前5个主成分)
n_components = 5
for label in range(10):
plt.figure(figsize=(8, 6))
label_data = X_scaled[y == label]
pca_label = PCA(n_components=n_components)
pca_label.fit(label_data)
for i in range(n_components):
plt.subplot(1, n_components, i+1)
plt.imshow(pca_label.components_[i].reshape(28, 28), cmap='gray')
plt.title(f'PC {i+1} for label {label}')
plt.axis('off')
plt.show()

生成的图像如下(仅显示标签为0,标签为1的主成分):

标签为0的主成分

标签为1的主成分