7.10 交差確認 (Cross-Validation)

 はじめに,記号の定義は以下の通りとする.

表記 内容
$p$ 入力の次元数
$j$ $(=1,\cdots,p)$:特徴量を表す添字
$X_j$ 特徴量(確率変数)
$X_0$ $=1$:ダミー変数
$X$ $=(X_0,X_1,\cdots,X_p)^T$:特徴量(確率変数)のベクトル
$Y$ 目標変数(確率変数)
$N$ 観測データ数
$i$ $(=1,\cdots,N)$:データを表す添字
$x_{i,j}$ 特徴量の観測値
$x_i$ $=(x_{i,0},x_{i,1},\cdots,x_{i,p})^T$:$i$番目の特徴量の観測値のベクトル
$y_i$ 目標変数の観測値
${\bf x}_j$ $=(x_{0,j},x_{1,j},\cdots,x_{N,j})$:特徴量$j$の観測値のベクトル
${\bf X}$ $=(x_{i,j})$:特徴量の観測値の行列
${\bf y}$ 目標変数の観測値のベクトル
$\beta_j$ 特徴量の重み
$\beta_0$ バイアス項
$\beta$ $=(\beta_0,\beta_1,\cdots,\beta_p)^T$:重みのベクトル
$\mathcal{T}$ 訓練データ集合

期待汎化誤差 $$Err = E[L(Y,\hat{f}(X))]$$ をどのように推定すればよいか.

 交差確認では,データを訓練(Train)データと検証(Validation)データに分割し,訓練データでモデルのフィッティングを行い,検証データでモデルの評価を行う.

7.10.1 $K$分割交差確認 ($K$-Fold Cross-Validation)

 $K$分割交差確認では,データをほぼ等しい大きさの$K$個の部分集合に分割し,$K-1$個のデータでモデルのフィッティングを行い,残りの1個のデータで予測誤差を計算する.これを$K$回繰り返し,予測誤差を$K$個推定する.

$k:\{1,\cdots,N \} \rightarrow \{1,\cdots,K \}$とし,$N$個のデータそれぞれを$K$個の部分集合のいずれかに対応させる(通常はランダム). $$CV(\hat{f})=\frac{1}{N} \sum_{i=1}^{N}L(y_i,\hat{f}^{- k (i)}(x_i)) $$

全体集合$\mathcal{D}$とする.$\mathcal{D}$を$K$個に分割する.ただし,$k=1,\cdots,K$である.部分集合$\mathcal{D}_k$とする.$\mathcal{D}_k$が検証データのときの訓練データ$\mathcal{T}_k$とする.$\mathcal{T}_k = D \backslash D_k$である.$|\mathcal{T}_k| \approx (K-1)N/K$となる.$|\mathcal{T}_k|$は自然数である.$k$番目のデータ$\mathcal{D}_k$を除いた$\mathcal{T}_k$で推定したモデル$\hat{f}^{- k (i)}$とする. \begin{eqnarray} &=&\frac{1}{K}\sum_{k=1}^K \frac{K}{N}\sum_{i \in \mathcal{D}_k}L(y_i,\hat{f}^{- k (i)}(x_i)) \\ &=&\frac{1}{N}\sum_{k=1}^K \sum_{i \in \mathcal{D}_k}L(y_i,\hat{f}^{- k (i)}(x_i)) \end{eqnarray}

  • 実務では,$K$は5または10とすることが多い.
  • $K=N$は,leave-one-out と呼ばれている.この場合,$k(i)=i$である.

チューニングの必要なハイパーパラメータ$\alpha$を持つモデルを考える(例として,リッジ回帰など).

$$CV(\hat{f},\alpha)=\frac{1}{N} \sum_{i=1}^{N}L(y_i,\hat{f}^{- k (i)}(x_i,\alpha)) $$

$K$の値はいくつにすべきか.

例:回帰の場合の汎化誤差 \begin{eqnarray} E[L(Y,\hat{f}(X))]&=&E[(X^T \hat{\beta}-Y)^2] \\ &=&E[(X^T ({\bf X}^T {\bf X})^{-1}{\bf X}^T {\bf y}-Y)^2] \end{eqnarray}

7.10.2 交差確認を実行する正しい方法と間違った方法

7.10.3 交差確認は本当に有効か

7.11 ブートストラップ法

7.12 条件付きテスト誤差か期待テスト誤差か