我在尝试理解sklearn.decomposition.PCA的API时遇到了困难。
我将数据(40个特征 x 10个样本)分为训练集(39个样本)和测试集(1个样本)。
我对代码进行了注释,注释内容是我认为/猜测的操作过程。
X_train, X_test = X_all[ix1], X_all[ix2]# 实例化PCA对象pca = PCA(n_components=n_comps)# 训练模型X_train_reduced = pca.fit_transform(X_train)# 降维X_testX_test_reduced = pca.transform(X_test)# 将X_test逆变换回原始维度X_test_inv = pca.inverse_transform(X_test) # <--- 错误....[这将继续根据n_comps检查错误]
在指示的行上出现了以下错误:
形状 (1,40) 和 (n_comps,40) 不对齐:40 (维度1) != n_comps (维度0)
编辑:变量的维度如下:X_test = 1 x 40
X_train = 9 x 40
X_test_reduced = 9 x n_comps
这应该实际如何操作?
回答:
你的问题在于你试图对原始数据应用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)