代码之家  ›  专栏  ›  技术社区  ›  Klaus

keras模型的特征选择

  •  7
  • Klaus  · 技术社区  · 6 年前

    我试图找到对回归模型的输出起主导作用的最佳特性,下面是我的代码。

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

    2 回复  |  直到 6 年前
        1
  •  15
  •   Jan K    6 年前

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

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

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

    我的建议:

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

    建议:

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

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