如何将PCA和keras分类器放入sklearn管道并进行网格搜索CV?

如何将PCA和keras分类器放入sklearn管道并进行网格搜索CV?,keras,scikit-learn,pipeline,pca,gridsearchcv,Keras,Scikit Learn,Pipeline,Pca,Gridsearchcv,我正在尝试使用PCA对keras神经网络进行网格搜索CV操作。为此,我构建了一个管道,其中包括PCA步骤,然后是使用sklearn包装器的keras估计器。然而,我想搜索的内容之一是PCA的n_分量,这意味着神经网络的输入大小需要可变,并且取决于在前一个piepline步骤中选择的特征数量 下面是我创建NN的代码,我已将其放入keras包装器中 def create_model(learning_rate=0.01, activation='relu',Input_Vector_Size=34,

我正在尝试使用PCA对keras神经网络进行网格搜索CV操作。为此,我构建了一个管道,其中包括PCA步骤,然后是使用sklearn包装器的keras估计器。然而,我想搜索的内容之一是PCA的n_分量,这意味着神经网络的输入大小需要可变,并且取决于在前一个piepline步骤中选择的特征数量

下面是我创建NN的代码,我已将其放入keras包装器中

def create_model(learning_rate=0.01, activation='relu',Input_Vector_Size=34,
                 neuron_number=10,dropout_prob=0.1):
    # Create an Adam optimizer with the given learning rate
    opt=Adam(lr=learning_rate)
    
    
    # Create your binary classification model  
    model=Sequential()
    model.add(Dense(neuron_number,input_shape=(Input_Vector_Size,), 
                    activation=activation))
    model.add(Dropout(dropout_prob))
    model.add(Dense(1,activation='sigmoid')) #output layer
    
    
    # Compile model with your optimizer, loss, and metrics
    model.compile(optimizer=opt,loss='binary_crossentropy',
                  metrics=['accuracy'])
    
    return model
我用

#%% Create a Pipeline with the Keras_Classifier and PCA
pca=PCA(n_components=0.9)
NN=KerasClassifier(build_fn=create_model,verbose=0)
# Define the parameters to try out
pipeline=Pipeline([('pca',pca),('NN',NN)])
params = {'pca__n_components':[0.8,0.85,0.9,0.95],
          'NN__activation': ['relu', 'tanh'], 
          'NN__neuron_number': [10, 15, 20], 
          'NN__dropout_prob':[0.05,0.1,0.2,0.3], 
          'NN__learning_rate': [0.1, 0.01, 0.001]}
然而,我有点拘泥于设置什么作为输入向量大小的参数,因为这将取决于PCA选择了多少特征

那么,是否有可能生成一个管道参数(此处为输入向量大小),该参数取决于管道前一步中的参数(此处为PCA选择的特征数量)


(注意:我意识到有一个选择是在我的NN中有一个自动编码器,并改变压缩,但我希望专门做PCA)

如果你没有在序列模型的第一层定义任何输入形状?如果你没有在序列模型的第一层定义任何输入形状?