交差検証(k-fold CV)

限られたデータで過学習を見抜く交差検証。k-foldと層化k-foldの違いも整理します。

限られたデータを最大限活用する、交差検証の仕組みと実装。

胡桃 あんず(普段) 胡桃 あんず

ねぇ、データが少ないときに訓練・検証・テストへ分けると、それぞれちっちゃくなりすぎない?

若葉 みどり 先生(笑顔) 若葉 みどり 先生

その通り。 そういう時こそ交差検証(Cross Validation)の出番よ。

白銀 ゆき(普段) 白銀 ゆき

k-fold交差検証が代表的。 データをk等分(典型はk=5や10)し、(1)1つを検証用、残りk-1を訓練用にして学習・評価、(2)これをk回繰り返して、毎回別の塊を検証用に、(3)k回の評価結果を平均する。

桜井 もも(普段) 桜井 もも

1回だけの評価より、k回ぶんを平均した方が信頼できる、ってことですかぁ?

白銀 ゆき(普段) 白銀 ゆき

そう、データの偶然のばらつきを平均で打ち消せる。 また、全データが訓練と検証の両方に使われるので、データを最大限活用できる。

胡桃 あんず(普段) 胡桃 あんず

k=5ってことは、1回の学習で全データを訓練に使えるわけじゃないよね?

若葉 みどり 先生(普段) 若葉 みどり 先生

1回の学習では4/5(80%)を訓練、1/5(20%)を検証に使う。 これをデータの『どの塊を検証に使うか』を変えながら5回繰り返す。

白銀 ゆき(普段) 白銀 ゆき

分類問題でクラス比が偏っているなら層化k-foldを使うわ。 各foldのクラス比を均等にすることで偏りを防ぐの。

桜井 もも(笑顔) 桜井 もも

層化って、統計のサンプリングのところで出てきましたねぇ♪

胡桃 あんず(普段) 胡桃 あんず

k=N(全データ数)にしたらどうなるの?

若葉 みどり 先生(普段) 若葉 みどり 先生

それをLeave-One-Out CV(LOOCV)と呼ぶの。 各イテレーションで1サンプルだけ検証、残り全部を訓練。 計算コストが高いけれど、データが極端に少ないときに有効。

白銀 ゆき(普段) 白銀 ゆき

DS検定としては『k-foldの仕組み』『k=5/10という典型値』『層化k-foldがいつ必要か』、この3点を押さえておけば十分ということね。

桜井 もも(笑顔) 桜井 もも

もも、ちゃんと覚えます♪

from sklearn.model_selection import cross_val_score, KFold
from sklearn.linear_model import LogisticRegression

X, y = ...  # 特徴量とラベル
kf = KFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(LogisticRegression(), X, y, cv=kf, scoring='accuracy')
print(f'CV accuracy: {scores.mean():.3f} (+/- {scores.std():.3f})')

確認クイズ

k-fold交差検証(k=5)で1モデルを評価する場合、何回モデル学習が行われるか。

  1. 1回
  2. 2回
  3. 5回
  4. 25回
こたえを見る

正解: 3. 5回

5回。 k=5 のときデータを5等分し、各回で異なる塊を検証用に、残り4塊を訓練用にして学習・評価を5回繰り返します。 5つの評価結果の平均を最終評価とします。

白銀ゆき・桜井もものイラスト。カラオケで音を外して恥ずかしがり

この記事の関連書籍

Amazonアソシエイトリンクを含みます。他分野は おすすめ書籍ページ へ。

この記事について

データサイエンティスト検定スタディが作成した教材です。運営について・記事の作り方

試験についてはこちらをご覧ください: データサイエンティスト協会 公式サイト

この記事を共有