scikit-learn - PCA 与 sklearn 差异

标签 scikit-learn 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 与我的案例中的 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()

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

Plot

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

关于scikit-learn - PCA 与 sklearn 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64425522/

相关文章:

python - 在 Anaconda 上升级到 scikit-learn 的开发版本?

python-3.x - 非随机地将数据拆分为训练和测试

machine-learning - SciKit SGD 回归器 RBF 核近似

r - 绘制 PCA 的所有组件

python - 将高斯过程模型拟合到 PCA。预测看起来很错误

r - 有没有办法为数据表绘制 UMAP 或 t-SNE 图?

python - 如何在 python/R 中访问 xgboost 模型的单个树

python - 在 fit 方法需要 3 个参数的自定义类上使用 sklearn GridSearchCV

python - 使用 FunctionTransformer 在特征子集上使用 PCA 的 sklearn 管道

r - 错误 : Too few points to calculate an ellipse with 3 points?-R