keras模型上的特征选择

Kla*_*aus 3 feature-selection python-3.x scikit-learn deep-learning keras

我试图找到主导回归模型输出的最佳功能,以下是我的代码。

seed = 7
np.random.seed(seed)
estimators = []
estimators.append(('mlp', KerasRegressor(build_fn=baseline_model, epochs=3,
                           batch_size=20)))
pipeline = Pipeline(estimators)
rfe = RFE(estimator= pipeline, n_features_to_select=5)
fit = rfe.fit(X_set, Y_set)
Run Code Online (Sandbox Code Playgroud)

但是运行时出现以下运行时错误。

RuntimeError: The classifier does not expose "coef_" or "feature_importances_" attributes
Run Code Online (Sandbox Code Playgroud)

如何克服这个问题并为模型选择最佳功能?如果不是,是否可以使用Scikit中RFE提供和支持的LogisticRegression()之类的算法来实现为数据集寻找最佳特征的任务?

Jan*_*n K 6

我假设您的Keras模型是某种神经网络。通常,对于NN来说,很难看到哪些输入特征是相关的,哪些是不相关的。这样做的原因是,每个输入要素都有与其链接的多个系数-每个系数都对应于第一隐藏层的一个节点。添加其他隐藏层使确定输入要素对最终预测的影响变得更加复杂。

另一方面,对于线性模型,这非常简单,因为每个特征x_i具有相应的权重/系数w_i,并且其大小直接确定其对预测的影响力(假设特征当然是按比例缩放的)。

RFE估计器(递归特征消除)假设您的预测模型具有一个属性coef_(线性模型)或 feature_importances_(树模型),该属性具有输入要素的长度,并表示它们的相关性(绝对值)。

我的建议:

  1. 特征选择:(选项a)在任何线性/树模型上运行RFE,以将特征数量减少到所需的数量n_features_to_select。(选项b)使用可增强稀疏性的正则化线性模型(例如套索/弹性网)。这里的问题是您不能直接设置所选功能的实际数量。(选项c)使用此处的任何其他功能选择技术。
  2. 神经网络:仅将(1)中的功能用于您的神经网络。