はじめに
Pythonではじめる機械学習にて、自動特徴量選択の手法についてまとめられていた。
有用な特徴量だけを残して残りを捨てて、特徴量の数を減らすことで、汎化性能を向上することができる。
その基本的な戦略が下記の3つ。
単変量統計
個々の特徴量とターゲットとの間に統計的に顕著な関係があるかどうかを計算する。
個々の特徴量を個別に考慮する。そのため、他の特徴量と組み合わさって意味を持つような特徴量は捨てられる。
特徴量が多すぎてモデルを作ることができない場合や、多くの特徴量が全く関係ないと思われるような場合には、この手法が有効。
sklearn
では、 SelectPercentile
を用いる。
モデルベース特徴量選択
教師あり学習モデルを1つ用いてここの特徴量の重要性を判断し、重要なものだけを残す手法。
特徴量選択に用いる教師あり学習モデルと最終的に使う教師あり学習モデルと同じでなくても良い。
例)RandomForestで特徴量の重要度を元に選択し、ロジスティック回帰で教師あり学習をする、など
sklearn
では、 SelectFromModel
を用いる。
反復特徴量選択
異なる特徴量を用いて一連のモデルを作る。
そのため前述の手法と比べて時間はかかる。
これには2つの基本的な方法がある。
- 全く特徴量を使わないところからある基準が満たされるところまで1つずつ特徴量を加えていく方法
- 全ての特徴量を使う状態から1つずつ特徴量を取り除いていく方法(再帰的特徴量削減)
2ではまず、全ての特徴量でモデルを作り、そのモデルで最も重要度が低い特徴量を削除する。そしてまたモデルをつくり、これを繰り返す。
sklearn
では、 RFE
を用いる。