交差検証(K-Fold)の考え方
交差検証で性能を安定して評価する方法、層化・グループ・時系列分割の使い分けを学びます。
1 回の分割では不安定#
ホールドアウト(1 回だけの分割)は手軽ですが、たまたまの分け方でスコアが上下します。 交差検証は、分割を変えて複数回評価し、その平均を取ることで安定した見積もりを得ます。
K-Fold のしくみ#
K-Foldでは、データを K 個に分け、各回 1 つを検証・残り K−1 個を訓練として K 回学習します。
Fold1: [検証][訓練][訓練][訓練][訓練]
Fold2: [訓練][検証][訓練][訓練][訓練]
…(K 回繰り返し、スコアを平均)各 fold の検証側に対する予測をつなげたものが OOF(Out-of-Fold)で、 スコア評価やアンサンブルに使います。
from sklearn.model_selection import StratifiedKFold, cross_val_score
from sklearn.linear_model import LogisticRegression
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
scores = cross_val_score(LogisticRegression(max_iter=1000), X, y, cv=skf)
print(scores.mean(), scores.std())分割方法を「データの性質」に合わせる#
| 手法 | 使うとき |
|---|---|
| K-Fold | 基本。各 fold をランダムに分ける |
| Stratified K-Fold | 分類でクラス比率を保ちたい(不均衡データで重要) |
| Group K-Fold | 同一ユーザー等が訓練と検証に跨らないようにする |
| 時系列分割 | 過去で学習し未来で検証する(時系列のリーク防止) |
理解度チェック#
次のステップ#
次は、回帰タスクの代表的な**評価指標(RMSE / MAE / RMSLE / R²)**を学びます。