Cross-Varidation(以下、CVと書く)ではデータを次のように2分割する。
- Training data (訓練データ)
- Test data (テストデータ)
訓練データでは解析を行い、モデルの構築など解析を行う。
テストデータでは訓練データによる解析の検証を行う。
というように役割を分けることで現在あるデータのみから妥当性の裏付けを行うことができるのが特徴である。適用範囲も広く、いろんな場面で使われるが、今回はモデル評価基準として使う場合を紹介する。(余裕があればコード例も。)
設定はアウトカムを $y$、説明変数を $\boldsymbol{x}$として、サンプルサイズは $n$であるする。(手順では回帰を意識していますが他でも使える)
つまり、データは $y_1,y_2,\ldots ,y_n$, $\boldsymbol{x}_1, \boldsymbol{x}_2, \ldots ,\boldsymbol{x}_n$の計 $n$セットが得られているってこと。
Leave-One-Out CV (LOOCV)の場合
無理やり訳せば「1個抜き交差検証法」かしら。
手順としては以下のようにすればよい。
- 大きさ $n$の観測データから1セットのデータ ($y_i, \boldsymbol{x}_i$)($i=1,2,\ldots ,n$のいずれか)を除き、それをテストデータとする。それ以外のデータを訓練データとする。
- 訓練データを用いてモデルを作成し、その結果得られた回帰係数 $\boldsymbol{\beta}$の推定値を $\boldsymbol{\beta}^{(i)}$とする。この推定値を用いて予測したアウトカムを $\widehat{y}^{(i)}$とする。(実測値は $y_i$)
- この手順を$i=1,2,\ldots ,n$で繰り返し行う。(だから $n$回やね。)
- 3.の結果 $n$個の $\widehat{y}^{(i)}$が得られる。
- 評価基準として以下のような基準をモデル評価基準で使えばよい。
- 平均二乗誤差(Mean Squared Error, MSE)
$$
MSE_{CV} = \frac{1}{n}\sum_{i=1}^{n}(y_i -\widehat{y}^{(i)})^2
$$ - 二乗平均平方根誤差(Root Mean Squared Error, RMSE)
$$
RMSE_{CV}= \sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i -\widehat{y}^{(i)})^2}
$$ - 平均絶対誤差(Mean Absolute Error, MAE)
$$
MAE_{CV} = \frac{1}{n}\sum_{i=1}^{n}|y_i -\widehat{y}^{(i)}|
$$
- 平均二乗誤差(Mean Squared Error, MSE)
これらの指標(のどれか)を使えばよいが、誤差の大きさを測る指標なのだから、これらの値は小さいほどよいモデルとなることもわかるね。もちろんMSEで比較するならMSE以外と比較したらダメよ。
線形回帰などのように説明変数の選び方によってモデルが変わるような場合はそれぞれのモデルで上記のモデル評価基準を計算してこの値が最も小さくなるモデルを最良のモデルと判断すればよい。
K-fold CVの場合
これはLOOCVの拡張(LOOCVの方が拡張?)で、さっきは1個抜きでやってた部分を一気に複数個(グループで)抜いてやろうとするだけ(その分繰り返し回数が減る)。$K$分割交差検証法とか言ったりもする。
グループで抜くのを繰り返すので説明の仕方としては、データを同じくらいの大きさになるように分割する(グループ数を$K$個とする)。式で書けばデータ行列を$X$としたときに、$\{X_1,X_2,\ldots ,X_K\}$のように分割(分割は集合論の分割の意味で使ってます。)し、厳密にイコールは無理だが、$|X_1|=|X_2|=\cdots =|X_K|$に近い形になるようにする。(ここに書いてある絶対値みたいな記号は絶対値ではなくて集合に対して使うときは集合の要素数(濃度)という意味になります。n(集合)
とか書いたりもします。高校生のときはこっちだったかな。)だから大体 $n/K$個くらいずつに分ける感じかな。
注意点としては、この分割の仕方はランダムにしなきゃダメってこと(最初に分けたらその後はグループ変えないけど)。だから、これはやる度にグループに属するデータが異なるから結果も若干異なることがあるという特徴(弱点?)がある。
そしたらあとはこの各グループを1つのサンプルとみなしてやればあとの手順は LOOCVと同じようにできるよね。だから$K$回繰り返さなきゃダメだね。