リッジ回帰におけるSVDとGCV

最終更新日: 2020年10月27日

今回は、リッジ回帰と特異値分解 (Singular Value Decomposition, SVD) の関係に加え、パラメーター最適化における一般化交差確認 (Generalized Cross-Validation, GCV) についてまとめました。間違いなどありましたら、ご指摘いただけると幸いです。

最小二乗線形回帰 (OLS) とリッジ回帰

例えば、説明変数 X∈Rn×pX \in \R^{n \times p} から目的変数 y∈Rn\boldsymbol{y} \in \R^{n} を予測する線形モデルは式 (1) のようになります。ただし、回帰係数 β∈Rp\boldsymbol{\beta} \in \R^{p}、誤差項 ε∈Rn∼N(0,σ2I)\boldsymbol{\varepsilon} \in \R^{n} \sim \mathcal{N}(0,\sigma^2 I) とします。

y=Xβ+ε(1)\boldsymbol{y} = X \boldsymbol{\beta} + \boldsymbol{\varepsilon} \quad (1)

この回帰係数の最小二乗推定量 β^\hat{\boldsymbol{\beta}} は、正規方程式で求められます。

β^=(X⊤X)−1X⊤y(2)\hat{\boldsymbol{\beta}} = (X^\top X)^{-1} X^\top \boldsymbol{y} \quad (2)

しかし、XX がランク落ちしていた場合、X⊤XX^\top X はいくつかの固有値がゼロとなって、逆行列を計算することができなくなります。したがって、対角要素に ridge を追加すると、全ての固有値が λ\lambda だけ増加して逆行列の計算が可能となります。

β^λ=(X⊤X+λI)−1X⊤y(3)\hat{\boldsymbol{\beta}}_{\lambda} = (X^\top X + \lambda I)^{-1} X^\top \boldsymbol{y} \quad (3)

(3) 式が、Hoerl and Kennard, 1970 によって提案されたリッジ回帰の方法です。これを最適化問題として書くと次のようになります。

argmin β∥y−Xβ∥22+λ∥β∥22\underset{\boldsymbol{\beta}}{\text{argmin }} \| \boldsymbol{y}-X\boldsymbol{\beta} \|_2^2 + \lambda \|\boldsymbol{\beta}\|_2^2

ここで、∥∥22\|\|_2^2 は ℓ2\ell_2 ノルム(ユークリッド距離)を指しています。そのため、リッジ回帰は ℓ2\ell_2-正則化とも呼ばれます(λ∥β∥22\lambda \|\boldsymbol{\beta}\|_2^2 は罰則項と呼ばれています)。この目的関数を β\boldsymbol{\beta} で微分してゼロになる点は、次のようにリッジ回帰推定量 β^λ\hat{\boldsymbol{\beta}}_{\lambda} と一致しています。

−2X⊤(y−Xβ^)+2λβ^=0(X⊤X+λI)β^=X⊤yβ^=(X⊤X+λI)−1X⊤y\begin{aligned} -2X^\top(\boldsymbol{y}-X\hat{\boldsymbol{\beta}}) + 2\lambda \hat{\boldsymbol{\beta}} &= 0 \\ (X^\top X + \lambda I)\hat{\boldsymbol{\beta}} &= X^\top \boldsymbol{y} \\ \hat{\boldsymbol{\beta}} &= (X^\top X + \lambda I)^{-1} X^\top \boldsymbol{y} \end{aligned}

λ\lambda の選択

ハイパーパラメーターとなる λ\lambda には、どんな値を使えばよいのでしょうか? 数値計算的には、λ=0.001\lambda=0.001 や最大固有値の逆数を利用すれば良いとされています1。λ\lambda を最適化する方法には、次のようなものがあります。

  • Validation dataset で各 λ\lambda に対する性能を測る。
  • Training dataset 内で Cross-validation をして各 λ\lambda に対する性能を測る。
  • CpC_p 規準や情報量規準を利用する。

ここでは、λ\lambda の効果を見るためにSVDを利用しようと思います。そのために、リッジ回帰とSVDの関係を始めに考えます。

リッジ回帰とSVD

XX の特異値分解 (SVD) を X=UDV⊤X = UDV^\top とします。ただし、直交行列 U=(u1,…,un)∈Rn×n,U = (\boldsymbol{u}_1, \dots, \boldsymbol{u}_n) \in \R^{n \times n}, V=(v1,…,vn)∈Rp×pV = (\boldsymbol{v}_1, \dots, \boldsymbol{v}_n) \in \R^{p \times p}、対角行列 D∈Rn×pD \in \R^{n \times p} であり、対角要素は大きい順に d1,…,dm (m=min⁡(n,p))d_1, \dots, d_{m}\ (m=\min(n,p)) とします。

これを式 (3) に代入すると、リッジ回帰推定量 β^λ\hat{\boldsymbol{\beta}}_{\lambda} を特異値分解の表現で書き直せます。

β^λ=(X⊤X+λI)−1X⊤y=((UDV⊤)⊤UDV⊤+λI)−1(UDV⊤)⊤y=(VD⊤U⊤UDV⊤+λVV⊤)−1VD⊤U⊤y=V(D⊤D+λI)−1D⊤U⊤y=V(d1d12+λO⋱Odmdm2+λ)U⊤y=∑dj>0vjdjdj2+λ⟨uj,y⟩\begin{aligned} \hat{\boldsymbol{\beta}}_{\lambda} &= (X^\top X + \lambda I)^{-1} X^\top \boldsymbol{y} \\ &= ((UDV^\top)^\top UDV^\top + \lambda I )^{-1} (UDV^\top)^\top \boldsymbol{y} \\ &= (VD^\top U^\top UDV^\top + \lambda V V^\top)^{-1} VD^\top U^\top \boldsymbol{y} \\ &= V (D^\top D + \lambda I )^{-1} D^\top U^\top \boldsymbol{y} \\ &= V \begin{pmatrix} \frac{d_1}{d_1^2 + \lambda} & & O \\ & \ddots & \\ O & & \frac{d_{m}}{d_{m}^2 + \lambda} \end{pmatrix} U^\top \boldsymbol{y} \\ &= \sum_{d_j \gt 0} \boldsymbol{v}_j \frac{d_j}{d_j^2 + \lambda} \langle \boldsymbol{u}_j, \boldsymbol{y} \rangle \end{aligned}

ただし、⟨⋅,⋅⟩\langle\cdot,\cdot\rangle は内積を示しています。この表現を利用して、予測 y^λ\hat{\boldsymbol{y}}_\lambda は次のように書けます。

y^λ=Xβ^λ=(UDV⊤)β^λ=UD(D⊤D+λI)−1D⊤U⊤y=∑dj>0ujdj2dj2+λ⟨uj,y⟩\begin{aligned} \hat{\boldsymbol{y}}_\lambda &= X \hat{\boldsymbol{\beta}}_{\lambda} = (UDV^\top) \hat{\boldsymbol{\beta}}_{\lambda} \\ &= U D (D^\top D + \lambda I )^{-1} D^\top U^\top \boldsymbol{y} \\ &= \sum_{d_j \gt 0} \boldsymbol{u}_j \frac{d_j^2}{d_j^2 + \lambda} \langle \boldsymbol{u}_j, \boldsymbol{y} \rangle \end{aligned}

λ\lambda とバイアス・バリアンスのトレードオフ

リッジ回帰の係数は、λ\lambda によって原点に向かって縮小されています。XX が n>pn \gt p でフルランクであるとすると、リッジ回帰推定量 β^λ\hat{\boldsymbol{\beta}}_{\lambda} のバイアスは、

Bias(β^λ)=E[β^λ]−β=E[(X⊤X+λI)−1X⊤y]−β=(X⊤X+λI)−1X⊤E[y]−β=(X⊤X+λI)−1X⊤Xβ−β=β−λ(X⊤X+λI)−1β−β=λV(D⊤D+λI)−1V⊤y=∑j=1pvjλdj2+λ⟨vj,y⟩\begin{aligned} \text{Bias}(\hat{\boldsymbol{\beta}}_{\lambda}) &= \mathbb{E}[\hat{\boldsymbol{\beta}}_{\lambda}]-\boldsymbol{\beta} \\ &= \mathbb{E}[(X^\top X + \lambda I)^{-1} X^\top \boldsymbol{y}]-\boldsymbol{\beta} \\ &= (X^\top X + \lambda I)^{-1} X^\top \mathbb{E}[\boldsymbol{y}]-\boldsymbol{\beta} \\ &= (X^\top X + \lambda I)^{-1} X^\top X \boldsymbol{\beta}-\boldsymbol{\beta} \\ &= \boldsymbol{\beta} - \lambda (X^\top X + \lambda I)^{-1} \boldsymbol{\beta}-\boldsymbol{\beta} \\ &= \lambda V (D^\top D + \lambda I )^{-1} V^\top \boldsymbol{y} \\ &= \sum_{j=1}^p \boldsymbol{v}_j \frac{\lambda}{d_j^2 + \lambda} \langle \boldsymbol{v}_j, \boldsymbol{y} \rangle \end{aligned}

となって、λ>0\lambda \gt 0 では不偏推定量(バイアスがゼロ)とならず、そのバイアスは λ\lambda の増加に伴って大きくなります(縮小推定量となる)。これは、n<pn \lt p のときも同様です2。

一方、Wλ=(X⊤X+λI)−1X⊤XW_\lambda=(X^\top X + \lambda I)^{-1} X^\top X とおくとリッジ回帰推定量 β^λ\hat{\boldsymbol{\beta}}_{\lambda} のバリアンスは、

Var[β^λ]=Var[Wλβ^]=WλVar[β^]Wλ⊤=Wλσ2(X⊤X)−1Wλ⊤=σ2{(X⊤X+λI)−1X⊤X}(X⊤X)−1{(X⊤X+λI)−1X⊤X}⊤=σ2(X⊤X+λI)−1X⊤X{(X⊤X+λI)−1}⊤=σ2∑j=1pdj2(dj2+λ)2vjvj⊤\begin{aligned} \text{Var}[\hat{\boldsymbol{\beta}}_{\lambda}] &= \text{Var}[W_\lambda \hat{\boldsymbol{\beta}}] = W_\lambda \text{Var}[\hat{\boldsymbol{\beta}}] W_\lambda^\top \\ &= W_\lambda\sigma^2 (X^\top X)^{-1} W_\lambda^\top \\ &= \sigma^2 \{(X^\top X + \lambda I)^{-1} X^\top X\} (X^\top X)^{-1}\{(X^\top X + \lambda I)^{-1} X^\top X\}^\top \\ &= \sigma^2 (X^\top X + \lambda I)^{-1} X^\top X \{(X^\top X + \lambda I)^{-1}\}^\top \\ &= \sigma^2 \sum_{j=1}^p \frac{d_j^2}{(d_j^2 + \lambda)^2} \boldsymbol{v}_j \boldsymbol{v}_j^\top \end{aligned}

と誤差の分散 σ2\sigma^2 を用いて計算できます。したがって、λ\lambda の増加に伴ってバリアンスは小さくなるとわかります。そして、これらがバイアス・バリアンスのトレードオフに繋がります。

すなわち、λ\lambda を大きくすると、バイアス(モデルの適合度)が大きくなるが、バリアンス(モデルの複雑さ)が小さくなるため、両方を共に小さくすることが難しくなります。

補足:最小二乗推定量のバリアンス
Var[β^]=Var[{β^−E[β]}{β^−E[β]}⊤]=E[{(X⊤X)−1X⊤y−β}{(X⊤X)−1X⊤y−β}⊤]=(X⊤X)−1X⊤E[YY⊤]X(X⊤X)−1−ββ⊤=(X⊤X)−1X⊤{Xββ⊤X⊤+Var(εi)I}X(X⊤X)−1−ββ⊤=ββ⊤+σ2(X⊤X)−1−ββ⊤=σ2(X⊤X)−1\begin{aligned} \text{Var}[\hat{\boldsymbol{\beta}}] &= \text{Var}[\{\hat{\boldsymbol{\beta}}-\mathbb{E}[\boldsymbol{\beta}]\}\{\hat{\boldsymbol{\beta}}-\mathbb{E}[\boldsymbol{\beta}]\}^\top]\\ &= \mathbb{E}[\{(X^\top X)^{-1} X^\top \boldsymbol{y} -\boldsymbol{\beta}\}\{(X^\top X)^{-1} X^\top \boldsymbol{y} -\boldsymbol{\beta}\}^\top]\\ &= (X^\top X)^{-1} X^\top \mathbb{E}[YY^\top] X (X^\top X)^{-1} - \boldsymbol{\beta}\boldsymbol{\beta}^\top \\ &= (X^\top X)^{-1} X^\top \{X\boldsymbol{\beta}\boldsymbol{\beta}^\top X^\top + \text{Var}(\varepsilon_i)I\} X (X^\top X)^{-1} - \boldsymbol{\beta}\boldsymbol{\beta}^\top\\ &= \boldsymbol{\beta}\boldsymbol{\beta}^\top + \sigma^2 (X^\top X)^{-1} - \boldsymbol{\beta}\boldsymbol{\beta}^\top \\ &= \sigma^2 (X^\top X)^{-1} \end{aligned}

Cross-Validation の効率的な計算

λ\lambda を適切に調節することで、バイアス・バリアンスのバランスを調節できます。各 λ\lambda に対する汎化誤差を推定する方法の1つに、Cross-Validation の利用があります。一般には、k-fold Cross-Validation を利用して分割した kk 個の平均予測誤差を計算します。また、非凸の罰則に対しては、CpC_p 規準や情報量規準を利用するときに問題が指摘されており、Cross-Validation の利用が提案されています3。

n-fold Cross-Validation (= Leave One Out Cross-Validation, LOOCV) の誤差 LOOλ\text{LOO}_\lambda を求めるときには、次のように計算を効率化できます4。ただし、各 nn サンプルについて明示的に X=(x1,…,xn)⊤,X=(\boldsymbol{x}_1, \dots, \boldsymbol{x}_n)^{\top},  y=(y1,…,yn)\ \boldsymbol{y}=(y_1, \dots, y_n) と表現することにします。

LOOλ=∑i=1n(yi−xi⊤β^λ(−i))2=∑i=1n(yi−xi⊤β^λ)2(1−Riiλ)2(4)\begin{aligned} \text{LOO}_\lambda &= \sum_{i=1}^n (y_i - \boldsymbol{x}_i^\top \hat{\boldsymbol{\beta}}_{\lambda}^{(-i)})^2 \\ &= \sum_{i=1}^n \frac{(y_i - \boldsymbol{x}_i^\top \hat{\boldsymbol{\beta}}_{\lambda})^2}{(1-R_{ii}^\lambda)^2} \quad (4) \end{aligned}

ここで、β^λ(−i)\hat{\boldsymbol{\beta}}_{\lambda}^{(-i)} は ii 番目の fold 以外で推定した推定量であり、RλR^\lambda は次のようなリッジ演算子行列です。

Rλ=X(X⊤X+λI)−1X⊤R^\lambda = X(X^\top X + \lambda I)^{-1}X^\top

したがって、LOOλ\text{LOO}_\lambda の計算において、回帰係数 β^λ\hat{\boldsymbol{\beta}}_{\lambda} の推定は1回で十分ということになります。 さらに、RλR^\lambda はSVDを利用して効率的に求めることができます。

Rλ=V(D⊤D+λI)−1D⊤U⊤=U(d12d12+λO⋱Odrdr2+λ)U⊤=USλU\begin{aligned} R^\lambda &= V (D^\top D + \lambda I )^{-1} D^\top U^\top \\ &= U \begin{pmatrix} \frac{d_1^2}{d_1^2 + \lambda} & & O \\ & \ddots & \\ O & & \frac{d_{r}}{d_{r}^2 + \lambda} \end{pmatrix} U^\top = U S_\lambda U \end{aligned}

Generalized Cross-Validation

(4) 式で、tr[Rλ]=∑i=1nRiiλ\text{tr}[R^\lambda]=\sum_{i=1}^n R^\lambda_{ii} において平均を用いた

Riiλ≃1ntr[Rλ]R^\lambda_{ii} \simeq \frac{1}{n}\text{tr}[R^\lambda]

という近似を利用すると、誤差 GCVλ\text{GCV}_\lambda は次のようになります。この誤差を利用する方法は、Generalized Cross-Validation と呼ばれています。

GCVλ=∑i=1n(yi−xi⊤β^λ)2(1−1ntr[Rλ])2(5)\text{GCV}_\lambda = \sum_{i=1}^n \frac{(y_i - \boldsymbol{x}_i^\top \hat{\boldsymbol{\beta}}_{\lambda})^2}{(1-\frac{1}{n}\text{tr}[R^\lambda])^2} \quad (5)

この方法は、個々の対角要素 RiiλR^\lambda_{ii} よりもトレース tr[Rλ]\text{tr}[R^\lambda] で計算が容易となる場合に有用です。また、Li, 1986 によって GCVλ\text{GCV}_\lambda を最小化する λ\lambda が漸近的に最適であると示されています5。


Reference
  • Trevor, T. (2020). Ridge Regularization: An Essential Concept in Data Science. Technometrics. 62:4. 426-433. url
  • Hastie, T. (2020). Ridge Regularizaton: an Essential Concept in Data Science. arXiv preprint arXiv:2006.00371. url
  • van Wieringen, W. N. (2015). Lecture notes on ridge regression. arXiv preprint arXiv:1509.09169. url
  • Hoerl, A. E., & Kennard, R. W. (1970). Ridge regression: Biased estimation for nonorthogonal problems. Technometrics, 12(1), 55-67. url
  • Li, K. C. (1986). Asymptotic optimality of CLC_L and generalized cross-validation in ridge regression with application to spline smoothing. The Annals of Statistics, 14(3), 1101-1112. url
  • 荒木孝治 2013 罰則付き回帰とデータ解析環境R 公益社団法人日本オペレーションズ・リサーチ学会 url
  • 読了:Hastie (2020) リッジ正則化についてこれでもかこれでもかと語り倒す url


  1. Hastie, 2020 の Chapter 1 より。↩
  2. Hastie, 2020 の Chapter 3 より。↩
  3. 荒木孝治 2013 の 4章 より。↩
  4. PRESS統計量と呼ばれています。↩
  5. van Wieringen, 2015 の Chapter 1.8 より。この良い性質から、GCVはリッジ回帰のソフトウェアでデフォルトの設定となっていることがあります。↩