我正在研究 mnist 数据集的 PCA,我得到了一个非常奇怪的结果,我创建了一个矩阵,其行是扁平的 mnist 图像,当我尝试计算协方差矩阵的特征值时,我得到了一些负值。但是协方差矩阵是半正定的。
np.linalg.eigvals(np.dot(mnistBis[:, 0:20].T, mnistBis[:, 0:20])) # mnistBis.shape=(60000, 784)
array([ 4.79599869e+02, -1.19628465e+02, 9.68398702e+01, 1.88726171e-01,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,
0.00000000e+00, 0.00000000e+00, 0.00000000e+00, 0.00000000e+00])
修改: 这是完整的代码
import tensorflow.keras.datasets.mnist as mnist
import matplotlib.pyplot as plt
import numpy as np
(x_train, y_train), (x_test, y_test) = mnist.load_data()
mnistBis = np.reshape(x_train, (-1, 28*28))
np.linalg.eigvalsh(np.dot(mnistBis[:, 0:20].T, mnistBis[:, 0:20]))
```