Elastic Netの勉強
"ここ5年ほどで最も刺激的なアルゴリズムの一つ"と(「みんなのR」で)評されているElastic Netについて調べてみました。
Elastic Netとは
一般化線形モデルの回帰に正則化項を加味するモデル。
メリットとして次元削除と過学習防止を良い塩梅にやってくれるらしい。
まず、"Elastic Net"でググってみると、その説明ではどうやら「正則化項」なるものが重要らしい。
「正則化」すらも知らなかったのでググる。以下のページあたりが説明が丁寧だった
いや、それでもよくわからないのだけど、わからないなりに分かったこともある
アルゴリズムについて
たぶん、上記リンクをまとめると、
Elastic Netでは誤差関数(二乗誤差関数など)に次の式で表される正則化項を加えて最小化する
q=1の時にLasso回帰、 q=2の時にRidge回帰と呼ぶ。
また、それぞれに用いられている正則化項をL1ノルム、L2ノルムと呼ぶ。
・ Lasso回帰ではL1ペナルティーにより変数選択と次元削減を行う
・ Ridge回帰ではL2ペナルティーにより係数を縮小して過学習を抑える
Elastic NetはこれらLasso回帰とRidge回帰を線形結合したモデルでありLasso回帰とRidge回帰のいいとこ取りができる。式としては以下で表現される
なんだかニュアンスはわかったけどまだ釈然としない。
実際にElastic Netのコードを動かしてみて理解を深める作戦に変える。
Pythonではscikit-learnでElastic Netが用意されている。
sklearn.linear_model.ElasticNet — scikit-learn 0.17.1 documentation
いろいろググってみたけど、公式のサンプルコードが一番分かりやすかった
Lasso and Elastic Net for Sparse Signals — scikit-learn 0.17.1 documentation
ちなみに自前のデータをダミー化する必要があるときは、pandasのget_dummiesが便利
RでElastic Netを実行したいときは以下の本に詳しく載ってました
- 作者: Jared P. Lander,Tokyo.R(協力),高柳慎一,牧山幸史,簑田高志
- 出版社/メーカー: マイナビ
- 発売日: 2015/06/30
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る
まだ完全に理解はできてないけど、正則化などはすごく勉強になった。
そして scikit-learn便利過ぎる。理解を深める道具なのか、ヒトを駄目にする道具なのか...