今回は以前記事にした「
【scikit-learn】教師あり学習:高次元データの予測-3【Python】」に関しての内容です。
上の記事を軽く目を通していただくといいかもしれません。
L1,L2正則化の目的
日本語のブログでは正則化の目的、違いについてこのように書かれていることが多いです。
正則化・・・誤差関数にペナルティを設けることにより、係数が大きくなることを防ぎ過学習を抑制する。
L2正則化・・・係数を全体的に小さくし、過学習を抑制している。
L1正則化・・・寄与率の低い特徴量の係数を0にし、必要な特徴量の選択を行なっている。
多少の表現の違いはあれで、大まかな説明はこのようになっているでしょう。ここで疑問に思うのが、L1,L2共に係数の増加を防ぐことで過学習を抑制できるのですが、同じ過学習を抑制する手段であっても、L1の方が詳しく説明されすぎている点です。
少し日本語の表現が難しかったのでふわっとした書き方になってしまいましたが、私がこの2つの説明を比較したときに明らかにL1正則化の説明の方が限定的になっていたことに疑問をいただきました。同じようなことを考えた人はそこそこいるのではないでしょうか。
その答えが、scikit-learnのドキュメントにありました。やはり信用できるのは日本語記事ではなく英語です。
L2正則化の目的→縮小推定
学習データに使用する観測データには必ず誤差が含まれます。以前のブログ記事で紹介したました以下のグラフですが、こちらは単純にy=xのグラフが真の予測値となるはずです
。しかし、観測値に適当な誤差があると仮定しデータを作り予測を行うと、グレーの部分のようにさまざまな形のモデルができてしまいます。そして、このような誤差というのは現実の観測データの中に必ず含まれます。
たった少しの誤差だけで、このように予測結果にばらつきが生じるのはあまり良くありません。
そして、L2正則化を上のグラフに適応し、再度学習させると次のようなグラフになります。
先ほどとは異なり、 予測グラフの散らばりが小さくなりました。L2正則化はこのような誤差によるモデルの散らばりを防ぐ目的があるということです。
このように予測グラフの散らばりを防ぐことを日本語で直訳すると、「縮小推定」となります。私が調べた限り、日本語でこちらについて議論している記事はありませんでしたので直訳のまま掲載したいと思います。