⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

第16章 主成分分析 ​

习题16.1 ​

  对以下样本数据进行主成分分析:

X=[233457245568]

解答:

解答思路:

  1. 给出主成分分析算法
  2. 自编程基于numpy库实现主成分分析算法

解答步骤:

第1步:主成分分析算法

  主成分分析方法主要有两种,可以通过相关矩阵的特征值分解或样本矩阵的奇异值分解进行。

  1. 相关矩阵的特征值分解算法

  根据书中第16.2.2节的相关矩阵的特征值分解算法具体步骤:

(1)对观测数据按照如下公式进行规范化处理,得到规范化数据矩阵,仍以X表示

xij∗=xij−x¯isii, i=1,2,⋯,m; j=1,2,⋯,n

其中

x¯i=1n∑j=1nxij,i=1,2,⋯,msii=1n−1∑j=1n(xij−x¯i)2,i=1,2,⋯,m

(2)依据规范化数据矩阵,计算样本相关矩阵R

R=[rij]m×m=1n−1XXT

其中

rij=1n−1∑l=1nxilxlj,i,j=1,2,⋯,m

(3)求样本相关矩阵R的k个特征值和对应的k个单位特征向量。 求解R的特征方程

|R−λI|=0

得R的m个特征值

λ1⩾λ2⩾⋯⩾λm

求方差贡献度∑i=1kηi达到预定值的主成分个数k。
求前k个特征值对应的单位特征向量

ai=(a1i,a2i,⋯,ami)T,i=1,2,⋯,k

(4)求k个样本主成分
以k个单位特征向量为系数进行线性变换,求出k个样本主成分

yi=aiTx,i=1,2,⋯,k

(5)计算k个主成分yi与原变量xi的相关系数ρ(xi,yi),以及k个主成分对原变量xi的贡献率vi。

(6)计算n个样本的k个主成分值
将规范化样本数据带入k个主成分式,得到n个样本的主成分值。第j个样本xj=(x1j,x2j,⋯,xmj)T的第i个主成分值是

yij=(a1i,a2i,⋯,ami)(x1j,x2j,⋯,xmj)T=∑l=1malixlji=1,2,⋯,m,j=1,2,⋯,n

  根据书中第16章的定义16.2给出了方差贡献率:

定义16.2 第k主成分yk的方差贡献率定义为yk的方差与所有方差之和的比,记作ηk

(16.30)ηk=λk∑i=1mλi

k个主成分y1,y2,⋯,yk的累计方差贡献率定义为k个方差之和与所有方差之和的比

(16.31)∑i=1kηi=∑i=1kλi∑i=1mλi
  1. 样本矩阵的奇异值分解算法

  根据书中第16章的算法16.1主成分分析算法

算法16.1(主成分分析算法)
输入:m×n样本矩阵X,其每一行元素的均值为零;
输出:k×n样本主成分矩阵Y。
参数:主成分个数k
(1)构造新的n×m矩阵

X′=1n−1XT

X′每一列的均值为零。
(2)对矩阵X′进行截断奇异值分解,得到

X′=UΣVT

有k个奇异值、奇异向量。矩阵V的前k列构成k个样本主成分。
(3)求k×n样本主成分矩阵

Y=VTX

第2步:自编程基于numpy库实现主成分分析算法

python
import numpy as np


def pca_svd(X, k):
    """
    样本矩阵的奇异值分解的主成分分析算法
    :param X: 样本矩阵X
    :param k: 主成分个数k
    :return: 特征向量V,样本主成分矩阵Y
    """
    n_samples = X.shape[1]

    # 构造新的n×m矩阵
    T = X.T / np.sqrt(n_samples - 1)

    # 对矩阵T进行截断奇异值分解
    U, S, V = np.linalg.svd(T)
    V = V[:, :k]

    # 求k×n的样本主成分矩阵
    return V, np.dot(V.T, X)
python
X = np.array([[2, 3, 3, 4, 5, 7],
              [2, 4, 5, 5, 6, 8]])
X = X.astype("float64")

# 规范化变量
avg = np.average(X, axis=1)
var = np.var(X, axis=1)
for i in range(X.shape[0]):
    X[i] = (X[i, :] - avg[i]) / np.sqrt(var[i])

# 设置精度为3
np.set_printoptions(precision=3, suppress=True)
V, vnk = pca_svd(X, 2)

print("正交矩阵V:")
print(V)
print("样本主成分矩阵Y:")
print(vnk)
正交矩阵V:
[[ 0.707  0.707]
 [ 0.707 -0.707]]
样本主成分矩阵Y:
[[-2.028 -0.82  -0.433  0.     0.82   2.461]
 [ 0.296 -0.046 -0.433  0.     0.046  0.137]]

习题16.2 ​

  证明样本协方差矩阵S是总体协方差矩阵Σ的无偏估计。

解答:

解答思路:

  1. 给出总体协方差矩阵Σ
  2. 给出样本协方差矩阵S
  3. 给出无偏估计的定义
  4. 证明样本协方差矩阵S是总体协方差矩阵Σ的无偏估计

解答步骤:

第1步:总体协方差矩阵Σ

  根据书中第16章的定理16.1:

定理16.1 设x是m维随机变量,Σ是x的协方差矩阵,Σ的特征值分别是λ1⩾λ2⩾⋯⩾λm⩾0,特征值对应的单位特征向量分别是α1,α2,⋯,αm,则x的第k个主成分是

yk=αkTx=α1kx1+α2kx2+⋯+αmkxm,k=1,2,⋯,m

x的第k主成分的方差是

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

即协方差矩阵Σ的第k个特征值。

  根据书中第16章的本章概要的总体主成分的性质:

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

cov(y)=Λ=diag(λ1,λ2,⋯,λm)

第2步:样本协方差矩阵S

  根据书中第16.2.1的样本协方差矩阵定义:

  给定样本矩阵X,可以估计样本均值,以及样本协方差。样本均值向量x¯为

(16.40)x¯=1n∑j=1nxj

样本协方差矩阵S为

(16.41)S=[sij]m×msij=1n−1∑k=1n(xik−x¯i)(xjk−x¯j),i,j=1,2,⋯,m

第3步:无偏估计的定义

  根据《实用多元统计分析》(方开泰,1989年9月第一版)中第88~89页的无偏性:

如果参数θ的某个估计θ^满足E(θ^)=θ,则称θ^是无偏的。······引理3.4还指出:

Σ^=1nAd=1n∑α=1n−1zαzα′

z1,⋯,zn−1独立同分布于Np(0,Σ),于是

E(Σ^)=1n∑α=1n−1zαzα′=n−1nΣ

Σ^不是Σ的无偏估计,但可修正一下使之为无偏估计。令

S=1n−1A

则S是Σ的无偏估计。在实用中普遍采用S来估计Σ。

  无偏估计是用样本统计量来估计总体参数的一种无偏推断。估计量的期望等于被估计参数的真实值,则称此估计量为被估计参数的无偏估计,即具有无偏性。表示在多次重复下,它们的平均数接近所估计的参数真值。

第4步:证明样本协方差矩阵S是总体协方差矩阵Σ的无偏估计

  由样本协方差矩阵S定义:

S=1n−1∑i=1n(xi−x¯)((xi−x¯))′

  令:

A=∑i=1n(xi−x¯)((xi−x¯))′

  根据无偏估计的定义,证明样本协方差矩阵S是总体协方差矩阵Σ的无偏估计,即证明样本协方差矩阵S的期望等于总体协方差矩阵Σ:

E(S)=E(1n−1A)=1n−1E(A)=Σ

即证明:

E(A)=(n−1)Σ

  参考《应用多元统计分析 第五版》(王学民,2017年8月第5版)书中第51页的无偏性一节的推导

依(2.2.14)式

V(x¯)=1n2∑i=1nV(xi)=1n2∑i=1nΣ=1nΣ

于是

E(Σ^)=1nE[∑i=1n(xi−x¯)(xi−x¯)′]=1nE{∑i=1n[(xi−μ)−(x¯−μ)][(xi−μ)−(x¯−μ)]′}=1nE[∑i=1n(xi−μ)(xi−μ)′−n(x¯−u)(x¯−u)′]=1n[∑i=1nV(xi)−nV(x¯)]=1n(nΣ−n⋅1nΣ)=n−1nΣ
E(A)=E[∑i=1n(xi−x¯)(xi−x¯)′]=nE(Σ^)=n⋅n−1nΣ=(n−1)Σ

  因此,样本协方差矩阵S是总体协方差矩阵Σ的无偏估计。

习题16.3 ​

  设X为数据规范化样本矩阵,则主成分等价于求解以下最优化问题:

minL∥X−L∥Fs.t.rank(L)⩽k

其中,F是弗罗贝尼乌斯范数,k是主成分个数。试问为什么?

解答:

解答思路:

  1. 给出弗罗贝尼乌斯范数的定义
  2. 给出矩阵的最优近似
  3. 证明主成分是该最优化问题的最优解,该最优化问题的最优解是X的主成分

解答步骤:

第1步:弗罗贝尼乌斯范数

  根据书中第15章的定义15.4的弗罗贝尼乌斯范数:

  定义15.4(弗罗贝尼乌斯范数) 设矩阵A∈Rm×m,A=[aij]m×m,定义矩阵A的弗罗贝尼乌斯范数为

∥A∥F=(∑i=1m∑j=1n(aij)2)12

第2步:矩阵的最优近似

  根据书中第15.3.2节的定理15.3:

  定理15.3 设矩阵A∈Rm×n,矩阵的秩rank(A)=r,有奇异值分解A=UΣVT,并设M为Rm×n中所有秩不超过k的矩阵的集合,0<k<r,若秩为k的矩阵X∈M满足

‖A−X‖F=minS∈M‖A−S‖F

则

‖A−X‖F=(σk+12+σk+22+⋯+σn2)12

特别地,若A′=UΣ′VT,其中

Σ′=[σ1⋱0σk00⋱0]=[Σk000]

则

‖A−A′‖=(σk+12+σk+22+⋯+σn2)12=minS∈M‖A−S‖F

第3步:证明命题

  根据样本矩阵的奇异值分解算法(主成分分析算法),针对m×n样本矩阵X,需要表示为

X′=1n−1XT

对优化问题的目标函数进行如下变换:

minL‖1n−1XT−1n−1LT‖Fs.t.rank(L)⩽k

  令

X′=1n−1XT,L′=1n−1LT

  则原最优化问题等价于

minL∥X′−L′∥Fs.t.rank(L)⩽kX′=1n−1XTL′=1n−1LT

  对X′进行奇异值分解,根据已知主成分个数为k,X′的主成分个数也为k个,则

X′=U′Σ′V′T

  结合第2步,可知变换后的最优化问题和定理15.3类似,形如:

A∼X′S∼L′

  可找到 Σ′=diag(λ1′,λ2′,⋯,λk′,0,0,⋯,0) 使得变换后的目标函数取最小值,即存在矩阵满足主成分条件。

参考文献 ​

【1】方开泰. 实用多元统计分析[M]. 1989-09:88-89
【2】王学民. 应用多元统计分析 第五版[M]. 2017-08:51