web-dev-qa-db-ja.com

ケラスモデルでの特徴選択

私は回帰モデルの出力を支配する最高の機能を見つけようとしていました。以下は私のコードです。

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()のようなアルゴリズムを使用して、データセットに最適な機能を見つけるタスクを実行できますか?

5
Klaus

あなたのKerasモデルはある種のニューラルネットワークだと思います。また、一般的にNNの場合、どの入力機能が関連していて、どれが関連していないかを確認するのは難しいです。これは、各入力フィーチャに複数の係数がリンクされているためです。各係数は、最初の非表示レイヤーの1つのノードに対応しています。非表示レイヤーを追加すると、入力フィーチャが最終的な予測に与える影響の大きさを判断するのがさらに複雑になります。

一方、線形モデルの場合、各特徴x_iには対応する重み/係数w_iがあり、その大きさが予測に与える影響の大きさを直接決定するため、非常に簡単です(もちろん特徴がスケーリングされていると仮定)。

RFE推定器(再帰的特徴除去)は、予測モデルが入力特徴の長さを持つ属性coef_(線形モデル)またはfeature_importances_(ツリーモデル)を持ち、それらの関連性を表すことを前提としています(絶対条件)。

私のおすすめ:

  1. 特徴選択:(オプションa)任意の線形/ツリーモデルでRFEを実行して、特徴の数を目的の数n_features_to_selectに減らします。 (オプションb)スパース性を強制するラッソ/エラスティックネットのような正規化された線形モデルを使用します。ここでの問題は、選択した機能の実際の数を直接設定できないことです。 (オプションc) ここ からの他の特徴選択手法を使用します。
  2. ニューラルネットワーク:ニューラルネットワークには(1)の機能のみを使用します。
7
Jan K

提案:

SklearnベースのアルゴリズムでRFEアルゴリズムを実行して、特徴の重要性を観察します。最後に、最も重要に観察された機能を使用して、Kerasに基づいてアルゴリズムをトレーニングします。

あなたの質問へ:ロジスティック回帰には標準化は必要ありません

2
Hendouz