如何将PCA和keras分类器放入sklearn管道并进行网格搜索CV?
我正在尝试使用PCA对keras神经网络进行网格搜索CV操作。为此,我构建了一个管道,其中包括PCA步骤,然后是使用sklearn包装器的keras估计器。然而,我想搜索的内容之一是PCA的n_分量,这意味着神经网络的输入大小需要可变,并且取决于在前一个piepline步骤中选择的特征数量 下面是我创建NN的代码,我已将其放入keras包装器中如何将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,
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)如果你没有在序列模型的第一层定义任何输入形状?如果你没有在序列模型的第一层定义任何输入形状?