我正在使用sel = SelectFromModel(ExtraTreesClassifier(10), threshold='mean')
选择数据集中最重要的功能。
然后我想将这些选定的功能提供给我的keras分类器。但是我的基于keras的神经网络分类器需要在第一步中选择的重要特征的数量。下面是我的keras分类器的代码,变量X_new
是选择的新功能的numpy数组。
keras分类器的代码如下。
def create_model(
dropout=0.2):
n_x_new=X_new.shape[1]
np.random.seed(6000)
model_new = Sequential()
model_new.add(Dense(n_x_new, input_dim=n_x_new, kernel_initializer='glorot_uniform', activation='sigmoid'))
model_new.add(Dense(10, kernel_initializer='glorot_uniform', activation='sigmoid'))
model_new.add(Dropout(0.2))
model_new.add(Dense(1,kernel_initializer='glorot_uniform', activation='sigmoid'))
model_new.compile(loss='binary_crossentropy',optimizer='adam', metrics=['binary_crossentropy'])
return model_new
seed = 7
np.random.seed(seed)
clf=KerasClassifier(build_fn=create_model, epochs=10, batch_size=1000, verbose=0)
param_grid = {'clf__dropout':[0.1,0.2]}
model = Pipeline([('sel', sel),('clf', clf),])
grid = GridSearchCV(estimator=model, param_grid=param_grid,scoring='roc_auc', n_jobs=1)
grid_result = grid.fit(np.concatenate((train_x_upsampled, cross_val_x_upsampled), axis=0), np.concatenate((train_y_upsampled, cross_val_y_upsampled), axis=0))
当我使用Pipline进行网格搜索时,我不明白我的神经网络将如何获得第一步中选择的重要功能。我希望将这些重要的功能选择为X_new
。
我是否需要在sel
和keras model
之间实施自定义估算工具?
如果是,我将如何实施?我知道自定义估算器的通用代码,但我无法根据我的要求塑造它。通用代码如下。
class new_features(TransformerMixin):
def transform(self, X):
X_new = sel.transform(X)
return X_new
但这不起作用。有没有办法在不使用自定义估算器的情况下解决这个问题?