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

第16章 主成分分析

习题16.1

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

X=[233457245568]

解答:

解答思路:

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

解答步骤:

第1步:主成分分析算法

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

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

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

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

xij=xijx¯isii, i=1,2,,m; j=1,2,,n

其中

x¯i=1nj=1nxij,i=1,2,,msii=1n1j=1n(xijx¯i)2,i=1,2,,m

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

R=[rij]m×m=1n1XXT

其中

rij=1n1l=1nxilxlj,i,j=1,2,,m

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

|RλI|=0

Rm个特征值

λ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.2k主成分yk的方差贡献率定义为yk的方差与所有方差之和的比,记作ηk

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

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

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

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

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

X=1n1XT

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.1xm维随机变量,Σx的协方差矩阵,Σ的特征值分别是λ1λ2λm0,特征值对应的单位特征向量分别是α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¯=1nj=1nxj

样本协方差矩阵S

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

第3步:无偏估计的定义

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

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

Σ^=1nAd=1nα=1n1zαzα

z1,,zn1独立同分布于Np(0,Σ),于是

E(Σ^)=1nα=1n1zαzα=n1nΣ

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

S=1n1A

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

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

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

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

S=1n1i=1n(xix¯)((xix¯))

  令:

A=i=1n(xix¯)((xix¯))

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

E(S)=E(1n1A)=1n1E(A)=Σ

即证明:

E(A)=(n1)Σ

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

依(2.2.14)式

V(x¯)=1n2i=1nV(xi)=1n2i=1nΣ=1nΣ

于是

E(Σ^)=1nE[i=1n(xix¯)(xix¯)]=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Σn1nΣ)=n1nΣ
E(A)=E[i=1n(xix¯)(xix¯)]=nE(Σ^)=nn1nΣ=(n1)Σ

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

习题16.3

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

minLXLFs.t.rank(L)k

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

解答:

解答思路:

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

解答步骤:

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

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

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

AF=(i=1mj=1n(aij)2)12

第2步:矩阵的最优近似

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

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

AXF=minSMASF

AXF=(σk+12+σk+22++σn2)12

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

Σ=[σ10σk000]=[Σk000]

AA=(σk+12+σk+22++σn2)12=minSMASF

第3步:证明命题

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

X=1n1XT

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

minL1n1XT1n1LTFs.t.rank(L)k

  令

X=1n1XT,L=1n1LT

  则原最优化问题等价于

minLXLFs.t.rank(L)kX=1n1XTL=1n1LT

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

X=UΣVT

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

AXSL

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

参考文献

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