keras模型上的特征选择

问题描述 投票:2回答:2

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

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()等算法来完成为我的数据集寻找最佳功能的任务吗?

python-3.x scikit-learn deep-learning keras feature-selection
2个回答
4
投票

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

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

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

我的建议:

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

2
投票

建议:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.