読者です 読者をやめる 読者になる 読者になる

データの境界

なんちゃって理系がデータ分析業界に入ってからの汗と涙の記録。

Elastic Netの勉強

学習記録

"ここ5年ほどで最も刺激的なアルゴリズムの一つ"と(「みんなのR」で)評されているElastic Netについて調べてみました。

 

Elastic Netとは

一般化線形モデルの回帰に正則化項を加味するモデル。

メリットとして次元削除と過学習防止を良い塩梅にやってくれるらしい。

 

まず、"Elastic Net"でググってみると、その説明ではどうやら「正則化項」なるものが重要らしい。

正則化」すらも知らなかったのでググる。以下のページあたりが説明が丁寧だった

tjo.hatenablog.com

breakbee.hatenablog.jp

 

いや、それでもよくわからないのだけど、わからないなりに分かったこともある

 

アルゴリズムについて

たぶん、上記リンクをまとめると、

Elastic Netでは誤差関数(二乗誤差関数など)に次の式で表される正則化項を加えて最小化する

f:id:kskbyt:20160302002900p:plain

q=1の時にLasso回帰、 q=2の時にRidge回帰と呼ぶ。
また、それぞれに用いられている正則化項をL1ノルム、L2ノルムと呼ぶ。

http://cdn-ak.f.st-hatena.com/images/fotolife/T/TJO/20150228/20150228165325.png

 

・ Lasso回帰ではL1ペナルティーにより変数選択と次元削減を行う
・ Ridge回帰ではL2ペナルティーにより係数を縮小して過学習を抑える

Elastic NetはこれらLasso回帰とRidge回帰を線形結合したモデルでありLasso回帰とRidge回帰のいいとこ取りができる。式としては以下で表現される

 

f:id:kskbyt:20160302003150p:plain

 

なんだかニュアンスはわかったけどまだ釈然としない。

 

実際に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が便利

qiita.com

 

RでElastic Netを実行したいときは以下の本に詳しく載ってました

みんなのR -データ分析と統計解析の新しい教科書-

みんなのR -データ分析と統計解析の新しい教科書-

 

 

まだ完全に理解はできてないけど、正則化などはすごく勉強になった。

そして scikit-learn便利過ぎる。理解を深める道具なのか、ヒトを駄目にする道具なのか...