scikit-learnによる特徴選択

お盆ですな 昨日書いたの続き

satuma-portfolio.hateblo.jp

Motivation

  • 特徴選択がやりたい
  • Wekaはお手軽
  • でも僕はPythonでやりたい

ソースコード

さすがscikit-learn.めちゃシンプルにできた. 対象とするデータはirisデータセット ( UCI Machine Learning Repository: Iris Data Set )

詳細

scikit-learnでの特徴選択に関する関数はsklearn.feature_selectionに含まれている.今回は特徴量にランキングを付けて,そのランキングの上からk個を採用するというsklearn.feature_selection.SelectKBestを採用*1

次にランキングをつけるための評価関数を設定する必要がある.今回は相互情報量に基づいてランキングをつけるmutual_info_classifを採用*2

あとはSelectKBest(選択した評価関数, k=ベストいくつか).fit(データ行列, ラベル)とすればOK. もし,どの特徴を採用したか知りたい場合は,get_support()関数を使うことでboolean配列として取得することができる.

最後に

  • wrapper法がない..?
    • sklearn.feature_selection.SelectFromModelがwrapper法か?と思ったけど,なんか違う…
  • 「wrapper法はそんな難しくないんだから自分で組め」というアレなんだろうか…?

*1:他のものは API Reference — scikit-learn 0.19.0 documentation を参考に.多分Selectとついてるものが選択関連

*2:他のものは API Reference — scikit-learn 0.19.0 documentation を参考に.多分小文字で始まっているものが評価関数