0Pricing
Learn AI with Python · レッスン

交差検証の戦略

k 分割、層化 k 分割、Leave-One-Out、時系列分割の使い分けを学びます。

「交差検証の戦略」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。

交差検証を行う理由

1 回の訓練用データとテスト用データへの分割は、たまたま良い結果や悪い結果になる可能性があります。交差検証では異なる分割で評価を繰り返し、スコアを平均するため、性能をより信頼性高く推定できます。

K 分割交差検証

KFold はデータを K 個の同じ大きさの部分に分割します。各分割を 1 回ずつテストセットとして使い、残りでモデルを学習します。得られた K 個のスコアを平均します。

from sklearn.model_selection import KFold

kf = KFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in kf.split(X):
    Xtr, Xte = X[train_idx], X[test_idx]
    ytr, yte = y[train_idx], y[test_idx]
    # train and evaluate here

分類における層化 K 分割

分類では、通常の K 分割によってクラス比率が偏った分割ができることがあります。StratifiedKFold はすべての分割でクラスの比率を維持します。

from sklearn.model_selection import StratifiedKFold

skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)
for train_idx, test_idx in skf.split(X, y):
    # each fold keeps the same class balance as the full set
    pass

cross_val_score によるショートカット

cross_val_score は一連の処理を自動的に実行し、各分割のスコアを配列として返します。分類器には自動的に StratifiedKFold が使用されます。

from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier

clf = RandomForestClassifier(random_state=0)
scores = cross_val_score(clf, X, y, cv=5, scoring="accuracy")
print(scores)
print("Mean:", scores.mean(), "Std:", scores.std())

分割数の選び方

分割数を増やすと(例: 10)、バイアスの小さい推定値が得られますが、計算量が増えます。5 分割は一般的なバランスです。非常に小さいデータセットでは、Leave-One-Out が N 個の分割を使い、各テストセットを 1 サンプルにします。

from sklearn.model_selection import LeaveOneOut, cross_val_score

loo = LeaveOneOut()
scores = cross_val_score(clf, X, y, cv=loo)
print("Mean:", scores.mean())

時系列データのための TimeSeriesSplit

時系列では、未来のデータで学習してはいけません。TimeSeriesSplit は常に過去のデータを学習に使い、次のブロックをテストに使います。分割を重ねるごとに学習期間を拡張します。

from sklearn.model_selection import TimeSeriesSplit

tscv = TimeSeriesSplit(n_splits=5)
for train_idx, test_idx in tscv.split(X):
    # train_idx always precedes test_idx in time
    print(len(train_idx), len(test_idx))

時系列で順序が重要な理由

時系列順に並んだデータをシャッフルすると、未来の情報が学習に漏洩し、スコアが過大になります。TimeSeriesSplit は時系列の順序を守るため、評価が実際の予測条件を反映します。

複数の指標に対応する cross_validate

cross_validate は cross_val_score に似ていますが、一度に複数の指標を返し、学習スコアや適合時間も含められます。

from sklearn.model_selection import cross_validate

results = cross_validate(
    clf, X, y, cv=5,
    scoring=["accuracy", "f1_macro", "roc_auc_ovr"],
    return_train_score=True,
)
print(results["test_accuracy"])
print(results["test_f1_macro"])

cross_validate の出力を読み取る

結果は、test_<metric>、train_<metric>、fit_time、score_time などのキーを持つ dict です。訓練スコアとテストスコアを比較すると、過適合を診断できます。

import numpy as np

gap = results["train_accuracy"].mean() - results["test_accuracy"].mean()
print("Overfit gap:", gap)
print("Avg fit time:", np.mean(results["fit_time"]))

交差検証とデータリーケージ

前処理(スケーリングやエンコーディング)は、交差検証の前ではなく、必ず CV ループの内部で適合させてください。Pipeline を使うと、各分割が学習データだけを使ってスケーリングするため、データリーケージを防げます。

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.model_selection import cross_val_score

pipe = make_pipeline(StandardScaler(), SVC())
scores = cross_val_score(pipe, X, y, cv=5)

適切な戦略の選び方

分類には StratifiedKFold、回帰には通常の KFold、時系列データには TimeSeriesSplit を使います。前処理はパイプラインに含め、分割ごとの平均と標準偏差を報告してください。

クイックチェック

交差検証に関する知識を確認しましょう。

まとめ

まとめ: 交差検証では複数の分割における性能を平均します。回帰には KFold、バランスの取れた分類には StratifiedKFold、時系列データには TimeSeriesSplit を使います。cross_val_score は 1 つの指標を、cross_validate は複数の指標と処理時間を返します。データリーケージを防ぐため、前処理は必ず Pipeline の内部で行ってください。

よくある質問

「交差検証の戦略」レッスンは無料ですか?

はい。「交差検証の戦略」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。

「交差検証の戦略」で何を学びますか?

k 分割、層化 k 分割、Leave-One-Out、時系列分割の使い分けを学びます。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Learn AI with Pythonを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「交差検証の戦略」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLearn AI with Pythonレッスンでコードを書いて実行できますか?

はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 交差検証の戦略
  2. 分類指標を深く学ぶ
  3. グリッドサーチとランダムサーチ
  4. Optuna によるベイズ最適化
← Learn AI with Pythonに戻る