正則化回帰: R によるリッジ回帰とラッソ回帰、解釈など

UB3/statistics/correlation/regression_ridge

このページの最終更新日: 2023/11/05


  1. 概要: 正則化回帰とは
  2. R を使った正則化回帰
  3. 多重共線性について

広告

概要: 正則化回帰とは

このページでは、データにノイズを入れて overfitting を回避しつつ、回帰係数が大きくなることに対してペナルティを与える 正則化回帰 regularized regression についてまとめる。リッジ回帰、ロッソ回帰および elastic net の 3 つの方法がメジャーなようである。URL は ridge なので、いずれ内容が増えてきたらページを分割する。

まずは、それぞれの方法の概念を簡単に。

回帰分析は、説明変数 X によって応答変数 Y の変動を予測しようとする分析である (→ 相関と回帰の違い)。説明変数 X が複数ある場合、重回帰分析 と呼ばれる。

重回帰分析において、それぞれの説明変数 X 同士に相関があると、回帰係数が大きくなり、全体の回帰の信頼性が下がってしまう。これを多重共線性 multicollinearity の問題という。

正則化回帰は、この問題を解決する方法の一つである。モデルに正則化項を加え、過学習を避ける。


リッジ回帰
Ridge regression

線形回帰に、学習した重み (回帰係数のことのようだ) の二乗の合計を加える (2)。

ラッソ回帰 Lasso regression

線形回帰に、学習した重みを二乗せずに加える (2)。

リッジ回帰とは異なり、説明変数の係数が 0 になる (つまり説明変数が取り除かれる) ことがある。説明変数の選択を自動で行ってくれるとも言える。

  • The advantage of LASSO regression is that we consider all potential drivers but only a subset of the covariates are selected (Panagiotidis et al., Finance Res Lett 27, 235-240, 2018).
  • However, some of the feature variables are highly correlated, e.g. wind speed and wave height, air pressure and wind force, cargo weight and draft etc., thus a typical multiple collinearity problem arises so that the fuel consumption cannot be accurately calculated by using the traditional multiple linear regression. In this study, the LASSO (Least Absolute Shrinkage and Selection Operator) regression algorithm is employed to implement the variable selection for these feature variables, additionally, it guides the trained predictor towards a generalizable solution, thereby improving the interpretability and accuracy of the model (ref).

Elastic net

リッジ回帰とラッソ回帰の折衷案 (2)。

ラッソ回帰ではモデルに取り込める説明変数の数に制限があるが、この問題点がなくなっているらしい。


広告

R を使った正則化回帰

3 つの回帰の方法は極めて似ていて、alpha = 0 ならリッジ回帰、1 なら Lasso 回帰、0 < α < 1 なら elastic net になる。

ここでは、BostonHousing という R の組み込みデータセットを用いて、実際の回帰を行ってみる。参考にしたのは 東京に棲む日々 ほか。最終的なモデルの評価は、このページ のように予測値と実測値のプロットで良いのか?

まず、BostonHousin のデータセットである。ボストンの家のデータが 14 項目にわたって収められており、データ数は 506 個である。図には最初の 10 個だけを載せている。一番右にある medv は median value of owner-occupied homes in USD 1000's つまり家の値段であるので、これを応答変数 Y として、残り 13 個の要因がどれだけ Y を予測できるか、正則化回帰で調べてみることにする。

R スクリプトのファイルは ここ からダウンロードできる。



まずは必要なライブラリーとデータをロードする。

library(mlbench)
data("BostonHousing")
library(glmnet)
library(tidyverse)
library(broom)

次に、BostonHousing の 13 個の要因を説明変数 X、medv を応答変数 Y として保存する。正則化回帰では、説明変数はベクターやデータフレームではなく、行列として読み込む必要がある。

predictors = BostonHousing %>% select(crim, zn, indus,
chas, nox, rm, age, dis, rad, tax, ptratio, b, lstat) %>% data.matrix()

response_variable = BostonHousing$medv

変数ラムダを指定する。正則化回帰を行う関数は glmnet である。alpha の指定が重要で、alpha = 0 だとリッジ回帰、1 だとラッソ回帰、0 と 1 の間だと弾性ネットになる。

lambdas = 10^seq(2, -2, by = -.1)
fit = glmnet(predictors, response_variable, alpha = 0, lambda = lambdas)
plot(fit, xvar = "lambda", label = TRUE)

このプロットにより、以下のような図が出力される。横軸は log lambda, 縦軸は回帰係数である。小さくて見にくいが、それぞれの線に番号が降ってある。それぞれの線は指定した X を示し、lamda が大きくなるほど回帰係数が小さくなることがわかる。

この図は alpha = 0 のリッジ回帰。

alpha = 0.5 の弾性ネット。リッジ回帰と同様に、回帰係数は lambda が大きくなるほど 0 に近づいていくが、弾性ネットではその収束がリッジよりも早いことがわかる。

これが alpha = 1 のラッソ回帰。収束は弾性ネットよりもさらに早い。

lambda の値が重要であるので、どの値が最適化をクロスバリデーションで調べる。関数は cv.glmnet である。

set.seed(1)
lambda_calc = cv.glmnet(predictors, response_variable, alpha = 1, lambda = lambdas, grouped = FALSE) plot(lambda_calc)
optlambda = lambda_calc$lambda.min

ラッソ回帰の場合のプロットのみを示す。縦軸は mean squared error で、左側の線で最小となる。これに対応する lambda が最適な lambda であり、これを optlambda として保存。

optlambda に対応する回帰係数を表示する。関数は coef である。

coef(fit, s = optlambda)

まずはラッソ回帰の結果を示す。いくつかの変数は回帰係数が . となっており、回帰と同時に変数の選択が行われていることがわかる。

一方、リッジ回帰ではこのように変数が全て残る。

弾性ネットは両方の性質をもつので、変数選択はするがラッソよりも残る数が多い。

多重共線性について

ここも、内容が増えてきたらページ分割することになるだろう。

多重共線性 multicollinearity とは、多重線形回帰に用いる説明変数 X の間に相関があることによって生じる問題である。強いものと弱いものがあり、このサイト では説明変数間の線形相関が強く、そもそも解が求まらない状況を「強い多重共線性」、線形相関が弱く解は求まるが、推定結果が不安定になる状況を「弱い多重共線性」としている。

多重共線性にもいろいろ種類があるようで (3)、その影響も推定結果がおかしくなる、推定結果の分散が大きくなる、そもそも解が求まらないなど、結果も多様なようである。

多重共線性のチェック方法

  • 説明変数同士の相関を見る。ただし、多重共線性は説明変数同士にシンプルな相関 (X1 = a + bX2) があるときに生じる可能性があるが、実はそれだけではなく、複数の説明変数同士で多重回帰のように X1 = aX2 + bX3 + c のような関係が成り立つときにも生じる (3)。したがって、シンプルに相関係数同士を plot するだけでは不十分。

統計と機械学習の枠組みで違いが生じるようである。統計と機械学習の違いについて

正則化回帰を使っても、やはりサンプル数が少ないと良い回帰はできない (参考)。とくに、説明変数が dense (多くの説明因子が少しずつ寄与している) な場合、lasso のパフォーマンスは非常に悪くなる。Ridge, random forest のがまだマシ。一方、説明変数が sparse (強く影響する少数の因子がある) なときは、lasso のパフォーマンスが良くなるようだ。


広告

References

  1. 罰則付き・正則化回帰モデルについて. Link: Last access 2020/06/08.
  2. 超入門!リッジ回帰・Lasso回帰・Elastic Netの基本と特徴をサクッと理解! Link: Last access 2020/06/08.
  3. 多重共線性とは~回避の方法として相関を見るだけでは..... バナナでもわかる話. Link: Last access 2020/06/26.

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。