keras 模型上的特征选择

Posted

技术标签:

【中文标题】keras 模型上的特征选择【英文标题】:Feature selection on a keras model 【发布时间】:2018-10-16 09:00:15 【问题描述】:

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

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)

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

RuntimeError: The classifier does not expose "coef_" or "feature_importances_" attributes

如何克服这个问题并为我的模型选择最佳功能?如果没有,我可以使用 Scikit 中 RFE 提供和支持的 LogisticRegression() 等算法来完成为我的数据集寻找最佳特征的任务吗?

【问题讨论】:

【参考方案1】:

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

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

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

我的建议:

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

【讨论】:

感谢您的回答,以便更清楚地说明,如果我使用 Sci-kit 提供的 LogisticRegression() 之类的算法运行 RFE 以确定特征重要性,可以吗?然后使用我的深度学习模型和通过 RFE 获得的预定特征。另外,在应用 RFE 之前我还需要特征比例吗?【参考方案2】:

建议:

在基于 sklearn 的算法上执行 RFE 算法以观察特征重要性。最后,您使用最重要的观察到的特征来训练基于 Keras 的算法。

对于您的问题:逻辑回归不需要标准化

【讨论】:

以上是关于keras 模型上的特征选择的主要内容,如果未能解决你的问题,请参考以下文章

从 LSTM 到 Sklearn 模型的特征提取

特征工程之特征选择

特征工程之特征选择

特征选择之FeatureSelector工具

如何在 Keras 回归模型中包含特征的归一化?

特征选择和特征理解 (转)