我正在尝试使用sklearn执行PCA的python实现。我创建了以下功能:将pca应用于测试数据
def dimensionality_reduction(train_dataset_mod1, train_dataset_mod2, test_dataset_mod1, test_dataset_mod2):
pca = PCA(n_components= 200)
pca.fit(train_dataset_mod1.transpose())
mod1_features_train = pca.components_
pca2 = PCA(n_components=200)
pca2.fit(train_dataset_mod2.transpose())
mod2_features_train = pca2.components_
mod1_features_test = pca.transform(test_dataset_mod1)
mod2_features_test = pca2.transform(test_dataset_mod2)
return mod1_features_train.transpose(), mod2_features_train.transpose(), mod1_features_test, mod2_features_test
我矩阵的大小如下:
train_dataset_mod1 733x5000
test_dataset_mod1 360x5000
mod1_features_train 200x733
train_dataset_mod2 733x8000
test_dataset_mod2 360x8000
mod2_features_train 200x733
然而,当我试图运行我收到以下消息整个脚本:
File "\Anaconda2\lib\site-packages\sklearn\decomposition\base.py", line 132, in transform X = X - self.mean_
问题是什么?我怎样才能将pca应用于测试数据?
这里PCA为MOD1的调试的示例:
的转化的数据集mod1_features_train和mod1_features_train具有正确的尺寸既500x733。但是我不能这样做test_dataset_mod1和test_dataset_mod2,为什么?
编辑:期间,我注意到,PCA的base.py文件,还有一个操作X = X调试 - self.mean其中X是我的测试数据和self_mean从拟合计算了火车的平均设置(slf_mean的大小是733,与X不匹配)。如果我在训练过程中移除了转置(),那么pca正常工作正常,没有错误,但test_dataset_mod1和test_dataset_mod2的大小正确为360x500,但train_dataset_mod1和train_dataset_mod2的大小错误为5000x500?
用尽全力在这两种情况下我都收到了错误。如果我不会将转置置于列车数据中,那么pca不会在这些功能中执行,但它会在没有用处的样本中执行。对于第二种解决方案,当我尝试使用转置或不转换测试数据时,我正在接收相同的消息。值错误:操作数无法与形状一起广播(5000,360)(733,) – konstantin
第一种方法正在工作,但结果,降维发生在样本中,而不是发生在矩阵的特征中。 – konstantin
@konstantin如果我理解你的问题是正确的,当我们使用.fit它只是找到没有变换数据的变换矩阵,你可以先使用.transform或.fit_transform来变换你的数据,祝你好运bro –