Scikit learn 带sklearn差异的PCA

Scikit learn 带sklearn差异的PCA,scikit-learn,pca,Scikit Learn,Pca,我试图在一个非常特定的环境中应用PCA,但遇到了一种我无法解释的行为。 作为一个测试,我使用您可以在这里检索的文件数据运行以下代码:(numpy数组格式) 我的问题如下:因为我没有指定任何数量的组件,所以我应该在这里使用所有计算组件进行重构。因此,我希望我的输出项目与输入测试相同。但一个快速的情节证明情况并非如此: plt.figure() plt.plot(test[0]-proj[0]) plt.show() 这里的图将显示投影和输入矩阵之间的一些较大差异 有人有什么想法或解释来帮助我理解

我试图在一个非常特定的环境中应用PCA,但遇到了一种我无法解释的行为。 作为一个测试,我使用您可以在这里检索的文件数据运行以下代码:(numpy数组格式)

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

plt.figure()
plt.plot(test[0]-proj[0])
plt.show()
这里的图将显示投影和输入矩阵之间的一些较大差异


有人有什么想法或解释来帮助我理解为什么proj与我的测试不同吗?

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

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结果应该更准确。

感谢您提供的这一非常清晰的解释,它实际上帮助我进一步了解处理有限精度值的复杂性!
plt.plot((test[0]-proj[0])/std)
plt.show()