0Pricing
Learn AI with Python · Lekcja

Strategie walidacji krzyżowej

k-fold, stratified k-fold, leave-one-out i podział szeregów czasowych — kiedy używać każdej metody.

Strategie walidacji krzyżowej to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Dlaczego walidacja krzyżowa

Pojedynczy podział na zbiór treningowy i testowy może być przypadkowo korzystny lub niekorzystny. Walidacja krzyżowa powtarza ewaluację na różnych podziałach i uśrednia wyniki, zapewniając bardziej wiarygodne oszacowanie wydajności.

Walidacja krzyżowa K-fold

KFold dzieli dane na K równych części. Każdy fold jest raz używany jako zbiór testowy, a na pozostałych trenowany jest model. Otrzymuje się K wyników, które można uśrednić.

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

Stratyfikowana walidacja K-fold dla klasyfikacji

W klasyfikacji zwykły K-fold może tworzyć podzbiory o niezrównoważonych proporcjach klas. StratifiedKFold zachowuje proporcje klas w każdym foldzie.

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

Skrót cross_val_score

cross_val_score wykonuje całą pętlę za Państwa i zwraca tablicę wyników poszczególnych foldów. W przypadku klasyfikatorów automatycznie używa 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())

Wybór liczby foldów

Większa liczba foldów (np. 10) zapewnia mniej obciążone oszacowanie, ale wymaga większej mocy obliczeniowej. Walidacja 5-fold to popularny kompromis. W przypadku bardzo małych zbiorów danych metoda leave-one-out wykorzystuje N foldów, z których każdy zbiór testowy zawiera jedną próbkę.

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 dla danych czasowych

W przypadku szeregów czasowych nigdy nie należy trenować na danych z przyszłości. TimeSeriesSplit zawsze wykorzystuje dane z przeszłości do trenowania, a następny blok do testowania, rozszerzając okno treningowe w kolejnych foldach.

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))

Dlaczego kolejność ma znaczenie w szeregach czasowych

Losowe mieszanie danych uporządkowanych w czasie powoduje wyciek informacji z przyszłości do procesu trenowania i zawyża wyniki. TimeSeriesSplit zachowuje kolejność chronologiczną, dzięki czemu ewaluacja odzwierciedla rzeczywiste warunki prognozowania.

cross_validate dla wielu metryk

cross_validate działa podobnie jak cross_val_score, ale zwraca jednocześnie kilka metryk i może uwzględniać wyniki trenowania oraz czasy dopasowania.

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"])

Odczytywanie wyników cross_validate

Wynikiem jest słownik z kluczami takimi jak test_<metric>, train_<metric>, fit_time i score_time. Porównanie wyników treningowych i testowych pomaga wykryć przeuczenie.

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"]))

Walidacja krzyżowa a wyciek danych

Zawsze należy dopasowywać wstępne przetwarzanie (skalowanie, kodowanie) wewnątrz pętli CV, a nie przed nią. Należy użyć obiektu Pipeline, aby każdy fold skalował dane wyłącznie na podstawie własnych danych treningowych, zapobiegając wyciekowi informacji.

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)

Wybór właściwej strategii

Należy używać StratifiedKFold w klasyfikacji, zwykłego KFold w regresji oraz TimeSeriesSplit dla danych czasowych. Wstępne przetwarzanie należy umieścić w potoku, a następnie raportować średnią i odchylenie standardowe wyników z poszczególnych foldów.

Szybki test

Sprawdź swoją wiedzę na temat walidacji krzyżowej.

Podsumowanie

Podsumowanie: Walidacja krzyżowa uśrednia wydajność dla wielu podziałów. Należy używać KFold w regresji, StratifiedKFold w zrównoważonej klasyfikacji oraz TimeSeriesSplit dla danych czasowych. cross_val_score zwraca jedną metrykę, a cross_validate wiele metryk oraz czasy wykonania. Wstępne przetwarzanie należy zawsze wykonywać wewnątrz obiektu Pipeline, aby zapobiec wyciekowi danych.

Często zadawane pytania

Czy lekcja „Strategie walidacji krzyżowej” jest bezpłatna?

Tak — pełny tekst „Strategie walidacji krzyżowej” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.

Co nauczysz się w „Strategie walidacji krzyżowej”?

k-fold, stratified k-fold, leave-one-out i podział szeregów czasowych — kiedy używać każdej metody. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?

Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Strategie walidacji krzyżowej”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?

Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Strategie walidacji krzyżowej
  2. Dogłębne omówienie metryk klasyfikacji
  3. Wyszukiwanie siatkowe i losowe
  4. Optymalizacja bayesowska z Optuna
← Powrót do Learn AI with Python