機械学習

Borutaによる特徴量の選択を調べたのでまとめておく

本日はkaggleのコンペをやる中でBorutaという方法をベースにした特徴量の選択に関して調べたので簡単にまとめておきます。

多くの特徴量の中から重要なものを選択する

モデルの予測精度を向上させるためには特徴量を作る特徴量エンジニアリングが必要になる場合が多々あります。

データ分析精度を競い合うkaggleではテーブルデータのコンペにおいて、しばしば100を超える特徴量によるモデルが作られているのを見かけます。

単純な特徴量の選択方法としては適当に選択して予測結果の比較を行う場合がありますが、特徴量同士が相関を持っていたり交互作用がある場合は最適な特徴量の選択が困難になります。

特徴量同士が独立している状況はほとんどないため、なんらかの方法で予測精度に寄与しない特徴量を削除する必要があります。

そこで今回紹介するのがBorutaという特徴量の選択手法になります。

Borutaのアルゴリズムの理解

Borutaのアイディアは非常にシンプルで下記のようになります。

(参照-BorutaPy – an all relevant feature selection method)

STEP1 

特徴量をコピーして新しい特徴量(shadow features)を作りだす

STEP2

新しく作成した特徴量(shadow features)の値を適当に設定する

STEP3

全部の特徴量合わせてRandom forestや勾配ブースティングなどで分類を行い、各特徴量のimportanceを得る

STEP4

もともとあった特徴量とShadow featuresの一番大きなimportanceの値の大きさを比較して大きければ記録カウントし、再度学習を行う。

STEP5 

学習を何度も行うことで元の特徴量が何回Shadow featuresのimportanceを上回っているかカウントして、その回数が統計的に有意であるかを確認する。

統計的に有意かはカウントデータが二項分布に従う帰無仮説を棄却するかを判断しているようで、Confirmed(有意で重要), Tentative(有意とは言えない), Rejected(有意で重要ではない)に分類されます。

まとめ

非常に単純な方法ですが、kaggleではこれでスコアが上昇したというdiscussionがあったりしたので1度試してみると良いと思います。

最後にコードとカーネルを載せておきます。