其他章节答案请参考我的汇总统计学习方法答案汇总,都是自己写的。
解:
import numpy as np
def PCA(X):
# 下面先对数据进行规范化
s = np.shape(X)
for i in range(s[0]):
mean_i = np.mean(X[i, :])
s_ii = np.sqrt(sum((X[i,:] - mean_i) * (X[i,:] - mean_i)) / (s[1] - 1))
X[i,:] = (X[i, :] - mean_i) / s_ii
X_T = X.T / np.sqrt(s[1] - 1)
#下面计算规范化之后的协方差矩阵
cov_matrix = np.matmul(X_T.T, X_T)
print('协方差矩阵是:', cov_matrix)
#下面开始对X_T进行奇异值分解
U, char, V = np.linalg.svd(X_T)
#下面开始计算因子负荷量
for i in range(s[0]):
print('第%d个主成分对各个x变量的负荷量:'%(i + 1), char[i] * V[i, :])
if __name__ == '__main__':
X = np.array([[2,3,3,4,5,7],
[2,4,5,5,6,8]], dtype = np.float32)
PCA(X)
输出为:
协方差矩阵是:
[[1. 0.9503288]
[0.9503288 0.9999999]]
第1个主成分对各个x变量的负荷量: [0.9875042 0.9875041]
第2个主成分对各个x变量的负荷量: [ 0.157593 -0.15759301]
证:计算数学的我直接懵了,看下面这个大佬的解答吧:样本协方差矩阵是总体协方差矩阵的无偏估计,大概是知道了怎么回事,过一段时间自己证明一下。
证:
1、先证明主成分求解是所给最优化的解。
因为下面两个最优化问题是等价的
m i n L ∥ X − L ∥ F s . t . r a n k ( L ) ≤ k \underset{L}{min} \left \| X-L \right \| _F\\ s.t.\quad rank(L)\le k Lmin∥X−L∥Fs.t.rank(L)≤k
m i n L ∥ X ′ n − 1 − L ′ n − 1 ∥ F s . t . r a n k ( L ) ≤ K \underset{L}{min} \left \| \frac{X^{'}}{\sqrt{n-1}}- \frac{L^{'}}{\sqrt{n-1}} \right \| _F\\ s.t.\quad rank(L)\le K Lmin∥∥∥∥∥n−1X′−n−1L′∥∥∥∥∥Fs.t.rank(L)≤K
之所以给出这个等价的最优化问题,是为了使用主成分分析的奇异值分解方法。我们将下面的最优化问题仍然记为
m i n L ∥ X − L ∥ F s . t . r a n k ( L ) ≤ k (1) \underset{L}{min} \left \| X-L \right \| _F\\ s.t.\quad rank(L)\le k \tag{1} Lmin∥X−L∥Fs.t.rank(L)≤k(1)
这样我们对 X X X进行奇异值分解得到
X = U Σ V T (2) X = U\Sigma V^{T}\tag{2} X=UΣVT(2)
将公式(2)带入(1)的目标函数我们得到
∥ X − L ∥ F = ∥ U Σ V T − U U T L V V T ∥ F = ∥ Σ − U T L V ∥ F \left \| X-L \right \| _F = \left \| U\Sigma V^{T}-UU^{T}LVV^{T} \right \| _F\\=\left \| \Sigma -U^{T}LV \right \| _F ∥X−L∥F=∥∥UΣVT−UUTLVVT∥∥F=∥∥Σ−UTLV∥∥F
其中 Σ = D i a g { λ 1 , λ 2 , . . . , λ n } \Sigma=Diag\{\lambda_{1},\lambda_{2},...,\lambda_{n}\} Σ=Diag{λ1,λ2,...,λn}是一个对角矩阵,因为矩阵 L L L的秩最大为 k k k,结合题目中范数的定义,我们得到当 U T L V U^{T}LV UTLV也是一个对角矩阵的时候,且 U T L V = D i a g { λ 1 , λ 2 , . . . , λ k , 0 , 0 , . . . , 0 } U^{T}LV=Diag\{\lambda_{1},\lambda_{2},...,\lambda_{k},0,0,...,0\} UTLV=Diag{λ1,λ2,...,λk,0,0,...,0}的时候,求得极小值,也就是
L = U ∗ D i a g { λ 1 , λ 2 , . . . , λ k , 0 , 0 , . . . , 0 } ∗ V T L = U*Diag\{\lambda_{1},\lambda_{2},...,\lambda_{k},0,0,...,0\} *V^{T} L=U∗Diag{λ1,λ2,...,λk,0,0,...,0}∗VT
因为求主成分就等价于求得 { λ 1 , λ 2 , . . . , λ k , 0 , 0 , . . . , 0 } , U , V \{\lambda_{1},\lambda_{2},...,\lambda_{k},0,0,...,0\},U,V {λ1,λ2,...,λk,0,0,...,0},U,V,根据这个最优化问题的解L的表达形式,我们可以知道已经将这个优化问题解决了。
2、下面根据最优化问题的解来推出主成分。
假设 L 0 L_{0} L0是上面那个优化问题的最优解,我们对这个矩阵解 L 0 L_{0} L0进行奇异值分解, L 0 = U A V T (3) L_{0} = UAV^{T}\tag{3} L0=UAVT(3)
其中 A A A是一个对角阵,我们将公式(3)带入最优化问题(1)的目标函数里面就得到
∥ X − L 0 ∥ F = ∥ U U T X V V T − U A V T ∥ F = ∥ U T X V − A ∥ F \left \| X-L_{0} \right \| _F = \left \| UU^{T}X VV^{T}-UAV^{T} \right \| _F\\=\left \| U^{T}X V-A \right \| _F ∥X−L0∥F=∥∥UUTXVVT−UAVT∥∥F=∥∥UTXV−A∥∥F
因为A是对角阵,要使得问题达到最优,要使A的秩尽可能的大,且U,V使得X也是一个对角矩阵。一定可以使得 U T X V U^{T}X V UTXV成为一个对角阵,如果不是,我们对 X X X进行奇异值分解,可以得到另外一个比 L 0 L_{0} L0更优解,这与 L 0 L_{0} L0是最优解就矛盾,因而到此得证!