LASSO推定値に影響を与えるパラメータ
前回の記事ではスパースモデリングの代表的手法であるLASSOを紹介しました。LASSOとは、以下の式の値を最小化する最適化問題のことを指します。
\(\frac{1}{2}\|\Phi x - y\|^2_2 + \lambda \|x\|_1\)
この式における第二項は正則化項、\(\lambda\)が正則化パラメータと呼ばれます。ここで正則化パラメータの大きさというのは、正則化項が及ぼす影響の大きさを表します。前回の記事でLASSOを用いるといくつかの回帰係数がゼロとなり、変数選択を行うことができると説明しましたが、正則化パラメータを変更することで、ゼロと推定される回帰係数の数が変わっていきます。正則化パラメータが大きい時は\(|x\|_1\)を小さくしようとする動きが働きます。つまり、ゼロと推定される回帰係数の数が多くなります。逆に正則化パラメータが小さい時は\(\lambda \|x\|_1\)が誤差関数に与える影響も小さくなるため、ほとんどがゼロであるという制約の力が弱まります。
正則化パラメータの変更が及ぼす影響の可視化
ここでは、実際に正則化パラメータを変化させていったときに、回帰係数の推定値にどのような影響を与えるのかということを可視化してみましょう。
同じ内容のコードを載せたJupyter Notebookを以下のリポジトリで公開しているので、興味ある方は実際に触ってみてください。
ここでは一例として、アメリカ合衆国の各都市における犯罪に関するデータに対してLASSOを適用してみます。このデータは以下のような情報が記載されています。
変数名 | 変数の意味 |
---|---|
1 | 警察官の年間給与 |
2 | 25歳以上の内高校を卒業した人の割合 |
3 | 16歳から19歳の内、高校に通っていない、または高校を卒業していない人の割合 |
4 | 18歳から24歳の内大学生の割合 |
5 | 25歳以上の人の内4年制大学を卒業した人の割合 |
目的変数 | 人口100万人あたりの犯罪率 |
これらが50都市分含まれています。
このデータに対して、LASSOを正則化パラメータを変化させながら適用することで、下のような図を描くことができます。
横軸は正則化パラメータの自然対数値、縦軸は正則化パラメータに対応する回帰係数を表しています。左端の数値は説明変数に割り振られた番号になります。このように正則化パラメータを変化させたときの推定値の推移を可視化したものを解パス(solution path)と呼びます。この図を見れば、正則化パラメータが大きくなるほどゼロと推定される回帰係数が多くなっていくことがわかります。
実際に\(log\lambda=-2\)としてLASSOを適用してみましょう。
model_for_solution = linear_model.Lasso(alpha=math.e**-2) model_for_solution.fit(X_train,y_train) print('Coefficients:',model_for_solution.coef_)
これを実行すると下記の結果を得ます。
Coefficients: [ 0.51031895 -0.14093297 0. 0. -0.]
解パス上で\(log\lambda=-2\)のパラメータの値を見れば、3、4、5の説明変数の回帰係数が0になっており、実際にLASSOを適用した結果と一致していることがわかります。