課題
重回帰には正則化という概念があり、回帰分析における損失関数に回帰係数の$L_1$ノルムの項を加えたものをラッソ回帰、$L_2$ノルムの項を加えたものをリッジ回帰と呼びます。
ラッソ回帰には変数選択の効果があり、正則化によって回帰係数のうちのいくつかが厳密に0になる性質を持ちます。これがラッソ回帰のスパース性と呼ばれる性質です。
今回は重回帰分析においてラッソ回帰とリッジ回帰を試し、スパース性を確認していこうと思います。
ソースコード
以下のように、50個の特徴量を持つサンプルを100個生成します。
X, y, coef_true = make_regression(
n_samples=100, n_features=50, noise=5.0, coef=True, random_state=0
)
正則化項の係数を変化させます。ここでは対数的に等間隔に係数を変化させていきます。
alphas = np.logspace(-3, 3, 100)
for alpha in alphas:
ridge = Ridge(alpha=alpha).fit(X, y)
lasso = Lasso(alpha=alpha, max_iter=10000).fit(X, y)
結果
ラッソ回帰では係数が0の項が右肩下がりに減じていっているのに対し、リッジ回帰では0となる係数は0のままです。リッジ回帰では不要とみなされた係数は徐々に小さくなっていくのみです。(正確には、徐々に小さくなっていく係数があればそれは不要とみなされていると考えられる)
なぜスパース性を持つ?
例えば2変数の重回帰分析であれば、
$$\min_{\beta_1,\beta_2}(y-\beta_1x_1 - \beta_2x_2 )^2 \space\space s.t. \space\space | \beta_1 | + | \beta_2 | \le t$$
がラッソ回帰です。$\beta_1$および$\beta_2$をそれぞれ横軸と縦軸に置いた座標平面を考えたとき、目的関数は係数のついた2次曲線となります。
係数は$\beta_1$が$x_1^2$、$\beta_2$が$x_2^2$なのでどちらも正であり、これは楕円です。
一方制約の方は、原点を中心とする正方形のダイヤ型になります。今、目的関数の値$k=(y-\beta_1x_1 - \beta_2x_2 )^2$をできるだけ小さくしたいわけですが、制約によりこの正方形の内側に目的関数の値が入っている必要があります。仕方なく楕円をどんどん大きくしていったときに正方形に初めて触れた点が、求める回帰係数$\beta_1$、$\beta_2$となるわけです。
楕円を大きくしていくとき、楕円とこの正方形とは、tが小さくなれば、すなわち$\lambda$が大きくなれば正方形の辺上ではなく正方形の角で初めて交点を持ちがちになります。正方形の角は軸の上にあるので、角上で交点を持ったときに片方の$\beta$は0となります。これがラッソ回帰のスパース性を説明するプロセスになります。
なお、リッジ回帰では正方形ではなく円を扱うため、回帰係数が明示的に0になることは非常に稀です。
GitHub