sklearn的PCA反演,尺寸错误

时间:2018-07-12 08:18:17

标签: python machine-learning scikit-learn data-science pca

试图了解sklearn.decomposition.PCA API,这让我很难受。
我将数据(40个特征x 10个样本)划分为训练(39个样本)和测试子集(1个样本)。

我用 我认为/猜测 发生的事情注释了代码。

X_train, X_test = X_all[ix1], X_all[ix2]

# Instantiate PCA
pca = PCA(n_components=n_comps)

# train the model
X_train_reduced = pca.fit_transform(X_train)

# reduce X_test
X_test_reduced = pca.transform(X_test)

# invert X_test back to original number of components
X_test_inv = pca.inverse_transform(X_test)  # <--- ERROR

....
[this would continue with checking errors bassed on n_comps]

所指示的行上的错误指出以下内容:
形状(1,40)和(n_comps,40)不对齐:40(dim 1)!= n_comps(dim 0)

编辑: 变量的尺寸:
X_test = 1 x 40
X_train = 9 x 40
X_test_reduced = 9 x n_comps

该如何实际上完成?

1 个答案:

答案 0 :(得分:2)

您的问题是,您尝试将pca.inverse_transform应用于原始数据。此功能的目的是将主要成分作为输入并将其转换回数据。在这里,您将传递数据作为输入。

从文档中

http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA.inverse_transform

您看到对于pca.inverse_transform,输入应为X : array-like, shape (n_samples, n_components),在您的情况下为(1, 10),这就是为什么出现此错误的原因

我想你想做的是

X_test_inversed = pca.inverse_transform(X_test_reduced)