我试图找到支持我的回归模型输出的最佳功能,以下是我的代码。
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()等算法来完成为我的数据集寻找最佳功能的任务吗?
我假设您的Keras模型是某种神经网络。通常,对于NN,很难看出哪些输入功能是相关的,哪些不相关。其原因是每个输入特征具有与其链接的多个系数 - 每个系数对应于第一隐藏层的一个节点。添加额外的隐藏层使得确定输入要素对最终预测的影响有多大,这更加复杂。
另一方面,对于线性模型,它非常简单,因为每个特征x_i具有相应的权重/系数w_i,并且其大小直接决定了它在预测中具有多大的影响(假设特征当然是按比例缩放的)。
RFE估计器(递归特征消除)假设您的预测模型具有属性coef_
(线性模型)或feature_importances_
(树模型),其具有输入特征的长度并且表示它们的相关性(绝对值)。
我的建议:
n_features_to_select
。 (选项b)使用正则化线性模型,如套索/弹性网,强制稀疏性。这里的问题是您无法直接设置所选功能的实际数量。 (选项c)使用here的任何其他特征选择技术。建议:
在基于sklearn的算法上执行RFE算法以观察特征重要性。最后,您使用最重要的观察特征来训练基于Keras的算法。
对于您的问题:逻辑回归不需要标准化