在给予sklearn管道中的分类器之前获取所选要素的名称和数量

时间:2018-02-13 08:40:25

标签: python machine-learning scikit-learn feature-selection

我正在使用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

数组

我是否需要在selkeras model之间实施自定义估算工具?

如果是,我将如何实施?我知道自定义估算器的通用代码,但我无法根据我的要求塑造它。通用代码如下。

class new_features(TransformerMixin):
def transform(self, X):
    X_new = sel.transform(X)
    return X_new

但这不起作用。有没有办法在不使用自定义估算器的情况下解决这个问题?

0 个答案:

没有答案