如何解决sklearn差异的PCA
我正在尝试在非常特定的上下文中应用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与我的案例中的测试不同吗?
解决方法
我检查了您的测试数据并发现以下内容:
names = john,anthony
phones = 8947467,74729
在某种意义上,我解释了标准偏差,以表示最小计数或所报告值的不确定性。我的意思是,如果数值算法将答案报告为mean = test.mean() # 1.9545972004854737e+24
std = test.std() # 9.610595443778275e+26
,则实际答案应在区间a
之内。这是因为数值算法的本质是不精确的。它们依赖于浮点运算,这些浮点运算显然不能代表所有地方的实数。
所以,如果我绘图:
[a - std,a + std]
我得到下面的情节,这似乎更合理。
您可能还对绘制相对误差感兴趣。或者,您可以将数据标准化为均值 0 和单位,然后PCA结果应该更准确。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。