试图了解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
该如何实际上完成?
答案 0 :(得分:2)
您的问题是,您尝试将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)