特徴量選択手法もしくは変数選択手法の一つに、Boruta があります。
こちらのこちらに書いた通り、
特徴量選択では、「予測精度」が上がるように特徴量を選ぶというより、不要な特徴量を削除するという意識で実施するとよいです。なぜなら、たとえトレーニングデータとテストデータに分けてテストデータで「予測精度」を評価したとしても、そのテストデータに過学習 (オーバーフィッティング) する可能性があるためです。
例えば、遺伝的アルゴリズム (Genetic Algorithm, GA) で、クロスバリデーション後の r2 やテストデータ (もしくはバリデーションデータ) の r2 が大きくなるように特徴量の組み合わせを選択することは簡単です。しかし、その結果選ばれた特徴量を用いて回帰モデルを構築したあと、新たなサンプルの y の値を、特徴量選択前より精度よく予測できるかどうかは不明です。
一方で Boruta では、何かの予測精度の指標を最大化することをしていません。そのためオーバーフィッティングが起こりにくいと言われています。
Boruta にはハイパーパラメータとして、p パーセンタイルの p があります。この詳細については以下をご覧ください。
p の値が大きいほど、特徴量が削除されやすいため、多くの特徴量を削除したい (少ない特徴量のみで議論したい) ときは、p の値を大きく、例えば p = 100 にするとよいです。
それでは特徴量が減りすぎてしまう場合に、何らかの方法で p の値を一つに決めたいときには、相関係数を利用するとよいと思います。具体的には、特徴量のサンプルをランダムに並び替えて目的変数との間で相関係数を計算することを 10000 回くらい行い、その相関係数の絶対値の最大値を rmax としたとき、p = 100 × (1 – rmax) とします。この考え方は、サンプルが少ないときなどに乱数の特徴量でもたまたま y との間の関係性が出てしまうことに基づきます。
ただ、いくつかの特徴量セットを並行して議論したいときなどは、p の値を振って Boruta を実行するとよいと思います。実際わたしも、p の値を 80, 90, 100 と振って、その結果を見ながら議論したり、それぞれ選択された特徴量ごとに、回帰モデルを構築して予測精度を検証したりしています。
このように、Boruta とはいえ p の値の設定によって特徴量選択の結果は変わり、場合によっては選択された特徴量で構築した回帰モデルの予測精度が選択前より低下してしまうケースもあるため、ある程度設定を振って検討するとよいと思います。
以上です。
質問やコメントなどありましたら、twitter, facebook, メールなどでご連絡いただけるとうれしいです。