一开始,我有 400,000 张经过归一化的图像(灰度值增加)。之后,我对每张图片进行了 DFT,得到了 400000 个样本的数据,具有 3200 个绝对傅立叶系数。
现在我想做一个 PCA 和 SVD。由于我的数据已经标准化并且所有值都具有相同的单位,我认为我可以使用“原始数据”进行计算。但是,PCA 的特征值和 SVD 的奇异值是不同的。(显示图片/链接)
我究竟做错了什么?PCA 和 SVD 应该如何获取数据?标准化,标准化,原始?
请帮我!谢谢
我的代码:
# samples 400000x3200
# SVD
U,S,VT = svd(samples, full_matrices=False)
tot_S = sum(S)
var_exp_S = [(i / tot_S) for i in S]
cum_var_exp_S = np.cumsum(var_exp_S)
# PCA
cov_mat = np.cov(samples.T)
eigen_vals, eigen_vecs = np.linalg.eig(cov_mat)
eigen_vals = np.asarray(sorted(eigen_vals,reverse=True))
tot = sum(eigen_vals)
var_exp = [(i / tot) for i in eigen_vals]
cum_var_exp = np.cumsum(var_exp)
num= 3200
plt.figure(figsize=(10,5))
plt.subplot(121)
plt.title('PCA')
plt.step(range(1,num+1),cum_var_exp[:num], where='mid',color='r')
plt.ylabel('share of variance')
plt.xlabel('principal components')
plt.legend()
plt.grid()
plt.subplot(122)
plt.title('SVD')
plt.step(range(1,num+1),cum_var_exp_S[:num], where='mid',color='r')
plt.ylabel('share of variance')
plt.xlabel('principal components')
plt.legend()
plt.grid()