【Python】ロジスティック回帰におけるL1正則化を用いる利点

機械学習

機械学習モデルのパラメータ最適化計算をする際に出てくる正則化項(罰則項)。一般的な正則化項としては、次の二つがあげられます。

L2正則化項
$$L2:||w||_2^2=\sum_{j=1}^{m}{w_j^2}$$

L1正則化項
$$L1:||w||_1=\sum_{j=1}^{m}{|w_j|}$$
L1正則化項を用いると疎な重み係数(パラメータ)が得られます。L2正則化項との比較をしながら、L1正則化項の利点を実際にPythonでソフトを作って検証してみます。今回参考にした書籍は以下です。

また、似たような記事を以下で載せていますが、今回は実際にPythonでL1正則化の利点を確認してみます。

L1正則化項を用いると疎な重み係数が得られる理由・利点
機械学習モデルのパラメータ最適化計算をする際に出てくる正則化項(罰則項)。一般的な正則化項としては、次の二つがあげられます。L1正則化項を用いると疎な重み係数(パラメータ)が得られる訳ですが、その理由はご存知でしょうか。L2正則化項との比較をしながら、L1正則化項の利点も合わせてご説明します。

【Python】L1正則化項とL2正則化項のロジスティック回帰における比較

今回はワインのデータを用いて、ワインの品種分類を行ってみます。ロジスティック回帰を用いたワインの品種分類自体は、以下の記事で紹介していますので、本編に入る前にちょろっと除いてもらったら、手法や使っているデータなどが分かると思います。

【Python】ロジスティック回帰モデルによるワインデータ分類
今回はPythonでロジスティック回帰モデルを用いてワインの等級を分類してみます。今回参考にしたのは、以下の参考書です。

今回は、ワインのデータに全く無意味なデータを追加したいと思います。上記で説明している通り、L1正則化を用いると、モデルの重み係数が疎になりやすくなります。その利点としては、無意味なデータが含まれているときに、それらの重み係数を0とし、無視する方向にL1正則化が働くことです。これを実際に確認するため、ワインのデータに無意味なデータを追加してみます。実際には、

\((0,1)\)の一様分布に掛けたり・足したり・引いたりしたものを、無意味なデータとしてワインデータに追加します。 このデータに対してロジスティック回帰をL1正則化項・L2正則化の各々に対して実行してみます。

【Python】L2正則化項によるロジスティック回帰

まずはL2正則化項を用いてロジスティック回帰を行ってみます。

94.3820224719101

[[ 1.09931971e+00 7.42456204e-02 6.06757152e-01 -4.98087040e-01 1.77174457e-01 5.61888096e-01 8.35649766e-01 -4.26028635e-01 1.31042252e-01 1.86715143e-01 2.79673641e-01 7.24959974e-01 1.47977069e+00 -7.15332231e-02 3.28030725e-01 -1.45995915e-01 5.03848570e-01]

[-1.26152573e+00 -8.90054276e-01 -8.50842626e-01 3.47492095e-01 -3.39087126e-01 7.23205616e-02 9.65414264e-02 4.10185539e-01 2.46526419e-01 -1.24441681e+00 6.05394664e-01 1.96931758e-01 -1.29296025e+00 1.77137329e-01 -1.55950059e-01 1.68361568e-01 -1.26827280e-01]

[ 4.13648018e-01 7.81530022e-01 3.09344574e-01 2.26332289e-01 1.58155445e-01 -2.18856421e-01 -8.77384787e-01 -1.13090061e-01 -4.34577460e-01 1.10305641e+00 -8.07822518e-01 -1.00250287e+00 -2.87896411e-01 -5.14812331e-02 1.28222869e-02 2.40849171e-04 -2.17999776e-01]]

ごちゃごちゃして申し訳ないですが、テストデータに対して分類問題の結果としては94.4%という正答率になりました。また、ロジスティック回帰モデルの重み係数も出力していますが、全ての係数が非0となりました。つまり、モデルの予測に無意味なデータも使用してしまっていることになります(無意味データに対する重み係数は赤字の部分です)。ちなみに重み係数を持つベクトルが3つある理由も、上記の【Python】ロジスティック回帰モデルによるワインデータ分類で説明しています。

【Python】L1正則化項によるロジスティック回帰

次にL1正則化項を用いてロジスティック回帰を行います。

95.50561797752809

[[ 1.06468318 0. 0.27193551 0. 0. 0. 1.2432031 0. 0. 0. 0. 0.76099496 2.76492421 0. 0. 0. 0.20847596]

[-1.21270346 -0.85120099 -0.55239836 0. -0.23978091 0. 0. 0.09533396 0.20550449 -1.68860188 0.54704395 0. -1.73189682 0. 0. 0. 0. ]

[ 0. 0.74101077 0.1302656 0. 0. 0. -1.29677407 0. -0.06624638 1.18422187 -0.82392967 -1.1745097 0. 0. 0. 0. 0. ]] 

L1正則化を用いたロジスティック回帰においては、精度が95.5%となりました。また、L2正則化のときと大きく違うのが、重み係数が疎になっている、つまり0成分のものが多いことです。しかも、無意味データに対する重み係数(各ベクトルの最後の4つ)が、ほぼ0になっています。ロジスティック回帰が学習を進める上で、最後の4つのデータがゴミであることに気づき、重みを0にしたようなイメージです。そのためか、精度もL2正則化の場合よりもいい結果になりました。

まとめ

今回はL1正則化項の利点をL2正則化項と比較しながら、ロジスティック回帰を用いてご紹介しました!

また、機械学習を勉強するための参考書を以下で紹介しています!よかったら見ていってください。

機械学習を勉強するためのオススメ参考書(理論・Python・Webアプリ)
統計・機械学習に関しては授業で習ったところありますが、結構忘れてしまっています(。また、Rの演習の授業はありましたが、Pythonは学生のころには使っていません。機械学習・データサイエンスを勉強するにあたり、私が参考にしている参考書を一挙ご紹介したいと思います。

コメント