備忘録

勉強や読書の記録

ISLR: Chapter 5 Resampling Methods

 Resampling methodsは訓練データから何度もサンプルを取り出し,モデルにフィットさせる.これにより,一度だけのフィッティングでは得られない情報を得られる.

 本章ではクロスバリデーションとブートストラップ法を扱う.クロスバリデーションはテストエラーの推定やモデルの適切な表現力を決める際に用いる.モデルの性能を評価するプロセスはモデル評価(model assessment)というのに対し,モデルの適切な柔軟性を決めるプロセスはモデル選択(model selection)という.ブートストラップ法は,一般に,与えられたモデルのパラメタ推定の正確さを測る際に用いる.

5.1 Cross-Validation

 モデルを作ったら,test error rateを見てどの程度うまくいってるか確認したい.が,テストデータが少なければそんなことはできない.そういう時は訓練データの一部をバリデーションデータとし,それをテストデータとみなして扱う.

5.1.1 The Validation Set Approach

 量的データを想定.量的データに対しては,二乗誤差の平均(Mean Squared Error, MSE)を使うことが多い. \displaystyle
\begin{align}
MSE=\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{f}(x_i))^{2}=\frac{RSS}{n}
\end{align}

 テストデータを十分に確保できない時に訓練データとバリデーションデータに分けてしまうこの方法の欠点は,

  1. 分割の仕方によってtest error rateがかなりばらつく

  2. テストデータに充てた分,訓練データが少なくなり,性能が悪化する.結果,validation set error rateは真のtest error rateを過大評価してしまう.

5.1.2 Leave-One-Out Cross-Validation (LOOCV)

 LOOCVもthe validation set approachと同様に訓練データとバリデーションデータに分ける.が,LOOCVではバリデーションデータは観測(x_i,\ y_i)1つのみ.それ以外の観測は全て訓練データ.訓練データを用いてフィットさせたモデルにx_iを入力しMSE(この場合は(y_i-\hat{y}_i)^{2})を求める.これはtest errorの不偏推定量の近似になってる.で,これを全てのデータについて繰り返す.そうすると,LOOCVによるtest MSEの推定量n個のMSEの平均になる. \displaystyle
\begin{align}
CV_{(n)}=\frac{1}{n}\sum_{i=1}^{n}MSE_i
\end{align}

 LOOCVには,(1) バイアスが小さく,test error rateを過大評価しにくい,(2) 全てのデータについて MSE_iを求めているため,分割のランダムネスに左右されるthe validation set approachのように分散が大きいという問題がない,という2つの利点がある.

 欠点としては,観測の数だけモデルをフィットさせる必要があるので,観測が多い時もしくはフィッティングに時間がかかる時は計算コストが高いことが挙げられる.が,最小二乗法による線形回帰もしくは多項式回帰なら以下の式でMSEを推定すると,1回のフィッティングで済むらしい. \displaystyle
\begin{align}
CV_{(n)}=\frac{1}{n}\sum_{i=1}^{n} {\biggl( \frac{y_i-\hat{y}_i}{1-h_i} \biggr)}^{2},\ \mbox{where }h_i=\frac{1}{n}+\frac{(x_i-\overline{x})^2}{\sum_{i’=1}^n(x_{i’}-\overline{x})^2} \label{magicFormula}
\end{align}
h_iはleverage statistic.leverage statistic h_i\displaystyle \frac{1}{n},\ 1]の値を取り,フィッティングにおけるi番目の観測の影響力を表している.i番目の残差を1-h_iで割ることで,high-leverageなx_iの残差を重視している.式\eqref{magicFormula}は一般には成り立たない.

5.1.3 k-Fold Cross-Validation

 LOOCVは観測の数だけフィット・予測を行うが,k-Fold Cross-Validationでは観測をk個のグループに分割し,あるグループをバリデーションデータ,それ以外は訓練データとしてフィッティング・予測を行う.これを k回繰り返す.  \displaystyle
\begin{align}
CV_{(k)}=\frac{1}{k}\sum_{i=1}^{k}MSE_i
\end{align}

 LOOCVと比べた時のメリットは計算量(LOOCV: n, k-Fold Cross-Validation: k\
 (k\leq n)

5.1.4 Bias-Variance Trade-Off for k-Fold Cross-Validation

 k-fold Cross-ValidationがLOOCVより優れている点として,計算量に加え,一般にtest error rateをLOOCVよりも正確に推定できる点が挙げられる.

 LOOCVはn-1個の観測を訓練データとして用いているのに対し,k-fold CVの訓練データに含まれる観測の数は(k-1)n/k個.つまり,k-fold CVの訓練データのサイズはLOOCVより小さく,the validation set approachより多い.したがってバイアス削減の観点から見たら,k-fold CVよりLOOCVの方が優れている.

 だが,得られたtest errorのバリアンスについてはLOOCVよりk-fold CVの方が小さい.というのは,LOOCVはn-1個の観測でモデルをフィッティングしているため,n個のフィットされたモデルはほぼ変わらない.つまり,n個のモデルには相関関係がある.一方,k-fold CVは観測をk個に分割しているので,観測の重複が少なく,結果として,k-fold CVで構築したモデル群の相関は,LOOCVで構築されたモデル群よりも弱い.相関が強いと分散が大きくなるので,test errorの分散の観点から見たら,LOOCVよりk-fold CVの方が優れている.

5.1.5 Cross-Validation on Classification Problems

 今度は質的データを分類したい時のCross-Validationの話.量的データの場合はMSEを用いたが,質的データを扱う場合にはエラー率Err_iを用いる.エラー率を用いてLOOCVは以下のように書くことができ,k-fold CVもアナロジーで書ける. \displaystyle
\begin{align}
CV_{(n)}=\frac{1}{n}\sum_{i=1}^{n}Err_i,\ \mbox{where } Err_i=I\ (y_i \neq \hat{y}_i)
\end{align}

5.2 The Bootstrap

 ブートストラップ法は,線形回帰の係数の標準誤差など,推定量や学習手法の不確かさを評価することができる.色々な手法に対して適用可能という守備範囲の広さも魅力.

 パラメタを推定したい時はサンプルを何度も生成して平均を取れば良いが,そもそもサンプル生成のためのパラメタが未知なのでそんなことはできない.ブートストラップ法なら母集団のパラメタが未知でも,手持ちのデータセットから繰り返しサンプルして異なるデータセットを作ることで,パラメタを推定する.

 具体的な方法は以下の通り.まず,n個の観測を含む手持ちのデータセットZからk\ (n \lt k)個の観測を抽出し,取り出されたk個の観測をブートストラップデータセットZ^{*1}とする.次にZ^{*1}を用いてパラメタを推定し,推定されたパラメタを\hat{\alpha}^{*1}とする.これらの手順をB回繰り返し,Z^{*1},\ Z^{*2},\ldots,\ Z^{*B}\hat{\alpha}^{*1},\ \hat{\alpha}^{*2},\ldots,\ \hat{\alpha}^{*B}を得る.そして,これらのパラメタの標準誤差を下式で求める. \displaystyle
\begin{align}
SE_B(\hat{\alpha})=\sqrt{\frac{1}{B-1}\sum_{r=1}^{B} {\biggl( \hat{\alpha}^{*r}-\frac{1}{B}\sum_{r’=1}^{B}\hat{\alpha}^{*r’} \biggr)}^{2}}
\end{align}
これは元のデータセット\hat{\alpha}を推定した時の標準誤差の推定量になっている.