学習する天然ニューラルネット

主に機械学習に関する覚書や情報の整理。競プロ水色→Kaggle Master→?

変数選択(Feature Selection)手法のまとめ

説明変数がめちゃくちゃ多いデータを扱うことになったので変数選択が重要なんじゃないかと思って調べたところまとまっている記事を見つけました。要約して翻訳してここに置いておきます。

追記:更に踏み込んだ話を記事にしました。

aotamasaki.hatenablog.com

こちらの記事の翻訳です: www.analyticsvidhya.com

はじめに

高価な優れた計算機など用いずにMacBookAirで、機械学習コンペに優勝した人もいる。優勝者に共通する特徴として、特徴製作(Feature Creation)と、変数選択(Feature Selection)をしっかりと行っていることに気づいた。

有用な特徴製作をするには膨大な経験を積む必要があり、センスも問われるので難しい。

なので変数選択に焦点を当てて、手法を紹介する。

変数選択(Feature Selection)の重要性

Rohan Rao曰く「時には少ない方がいい」

  • 学習時間を減らせる
  • モデルの複雑さが軽減され、簡単に解釈できるようになる。
  • モデルの精度が向上する
  • 過学習を減らせる

Filter Method

機械学習の手法とは独立した選択手法である。説明変数と目的変数の関係性にもとづいて選択する方法である。

全特徴 → 特徴の部分集合を選ぶ → 何らかの機械学習手法 → パフォーマンス f:id:aotamasaki:20180418201844p:plain

という流れでデータを解析できる。この特徴の部分集合を、説明変数と目的変数の関係性にもとづいて選択するのである。

では"説明変数と目的変数の関係性"とはなんぞやだが、基本的には次の表を参照して相関係数を定義することで判断できる。

f:id:aotamasaki:20180418200614p:plain

Featureが特徴(説明変数)、それが連続量かカテゴリーなのかを示している。 Responseはおそらく目的変数のこと、それが連続量なのかカテゴリーなのかを示している。

ただし、filter methodsでは多重共線性(通称マルチコ)を取り除くことはできないので注意が必要。

Pearson's Correlation

日本語で相関係数と言われたら思い浮かべるやつ。知っていると思うので省く。

LDA

連続量の特徴からカテゴリーを出力するとき、LDA(線形判別解析)を用いるのがいいだろう。 おそらくフィッシャーの線形判別じゃないかと思われる。

s0sem0y.hatenablog.com

Wikiには"変数が標準化されていれば、係数の大きさは、そのままその変数が判別に与える影響の大きさである"とあるので、係数の大きさでその変数が重要度となるのだろう。

ANOVA

説明変数がカテゴリーで目的変数が連続のときは分散分析。

こちらのスライドがわかりやすい。

www.slideshare.net

ここにもあるように、分散分析とは選択肢(カテゴリー)が変わることで、予測値が有意に変わるかの分析だ。F比を計算し、大きいなら有意ということなので、変数選択に使える。

カイ二乗(Chi-Square)

説明変数がカテゴリーで目的変数もカテゴリーのときは、χ2乗検定の独立性検定を用いる。

このサイトがわかりやすいです。

3.1 チキンの売り上げは少ないのか

これも有意に差がある変数を選択すれば良いです。

Wrapper Method

これは、機械学習アルゴリズムのパフォーマンスに従って、変数選択を決定する手法である。特徴の部分集合を機械学習アルゴリズムにまず入れてみて、それが前のモデル(また別の特徴を用いたとき)よりも良いか悪いかで、特徴を入れるか入れないかを決定する。 通常計算量が膨大になってしまう。 f:id:aotamasaki:20180418201910p:plain

このWrapper Methodによって変数選択をしてくれるBorutaというパッケージが存在するらしい。

danielhomola.com

Forward Selection

反復法の一つで最初は特徴を何も含まないモデルから始める。最もモデルを改善する特徴を追加していく。これをモデルが改善しなくなるまで繰り返す。

Backward Elimination

すべての特徴を含んだモデルから始める。もっとも重要でないと判断された特徴を削除していく。モデルのパフォーマンスが改善しなくなるまで削除を繰り返す。

Recursive Feature Elimination

最高性能の特徴部分集合を探す貪欲なアルゴリズム

最初は、全ての特徴を使ってモデルを作る。もっとも寄与した特徴かまたは寄与しなかった特徴を取り出す。 残った特徴を使ってまたモデルを作り、寄与した特徴か寄与しなかった特徴を取り出す。これを特徴がなくなるまで繰り返す。

取り除いた順番に従って特徴の重要度をランク付けする。

正直Backward EliminationとRecursive Feature Eliminationの明確な違いがわかりません…

Embedded Method

機械学習アルゴリズムの中で変数選択も同時に行ってくれる方法のこと。 具体的には、Lasso回帰, Ridge回帰, Regularized trees, Memetic algorithm, Random multinomial logitなどがある。

LASSOとRIDGEは有名ですね。モデルに必要ない変数の係数は自動的に小さくしてくれるようなアルゴリズム

決定木で特徴の重要度を抽出できたり、線形判別なら係数が直接特徴の重要度となるので、これを用いて変数選択もできそうです。 また、この方法のことをモデルベース特徴量選択というみたいです。(原文には書いてないです)(『Pythonで始める機械学習オライリー・ジャパン より)

Filter MethodとWrapper Methodの違い

  • Filter Methodは説明変数と目的変数の関係性から変数選択をする。一方Wrapper Methodはモデルを実際に訓練することで変数選択をする。
  • Filter Methodは早い。一方Wrapper Methodは超遅い。
  • Filter Methodは統計的手法で特徴をの有用性を評価するが、一方Wrapperは交差検証を使用する。(Wrapper Methodを使うときは交差検証しろよ!ということかなと思いました。)
  • Filter Methodでは最適な特徴の部分集合を見つけられないかも。一方Wrapper Methodでは結構良い特徴の部分集合が見つかる。
  • Wrapper MethodではFilter Methodよりも過学習が起きやすい。

最後に

あなたの力になれたと思うし、変数選択であなたはもっといいモデルが作れるようになったでしょうみたいなことが書かれてました。

今回はまとめただけですが、時間が合ったら実際に実装したいなぁと思いました。