具有sklearn差异的PCA

PCA with sklearn discrepancies

我正在尝试将 PCA 应用到一个非常具体的上下文中,然后 运行 应用到我无法解释的行为中。 作为测试,我 运行 以下代码包含您可以在此处检索的文件数据:https://www.dropbox.com/s/vdnvxhmvbnssr34/test.npy?dl=0(numpy 数组格式)。

from sklearn.decomposition import PCA
import numpy as np
test    = np.load('test.npy')
pca     = PCA() 
X_proj  = pca.fit_transform(test)       ### Project in the basis of eigenvectors
proj    = pca.inverse_transform(X_proj) ### Reconstruct vector

我的问题如下:因为我没有指定任何数量的组件,所以我应该在这里用所有计算的组件进行重建。因此,我希望我的输出 proj 与我的输入 test 相同。但快速情节证明情况并非如此:

plt.figure()
plt.plot(test[0]-proj[0])
plt.show()

此处的绘图将显示投影与输入矩阵之间的一些较大差异。

有没有人有想法或解释来帮助我理解为什么 proj 与我的案例中的 test 不同?

我检查了你的测试数据,发现如下:

mean = test.mean() # 1.9545972004854737e+24
std = test.std() # 9.610595443778275e+26

我将标准偏差解释为在某种意义上表示报告值中的最少计数或不确定性。我的意思是,如果数值算法报告答案为 a,那么真正的答案应该在 [a - std, a + std] 区间内。这是因为数值算法本质上是不精确的。它们依赖于浮点运算,这显然不能代表 实数

所以如果我绘制:

plt.plot((test[0]-proj[0])/std)
plt.show()

我得到下面的情节,似乎更合理。

您可能也有兴趣绘制相对误差。或者,您可以将数据标准化为 0 均值和 单位 方差,然后 PCA 结果应该更准确。