Strategier för korsvalidering
k-fold, stratified k-fold, leave-one-out och tidsserieuppdelning – när varje metod ska användas.
Strategier för korsvalidering är en gratis lektion i Lär Er AI med Python på CoddyKit. Detta är lektion 1 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lär Er AI med Python, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.
Varför korsvalidering
En enda uppdelning i tränings- och testdata kan ge ett överdrivet bra eller dåligt resultat. Korsvalidering upprepar utvärderingen på olika uppdelningar och beräknar medelvärdet av resultaten, vilket ger en mer tillförlitlig uppskattning av prestandan.
K-faldig korsvalidering
KFold delar upp data i K lika stora delar. Varje fold används en gång som testmängd medan resten används för att träna modellen. Resultatet blir K poäng som kan medelvärdesbildas.
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 hereStratifierad K-faldig korsvalidering för klassificering
Vid klassificering kan vanlig K-Fold skapa folds med obalanserade klassförhållanden. StratifiedKFold bevarar klassernas proportioner i varje fold.
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
passGenvägen cross_val_score
cross_val_score kör hela loopen åt dig och returnerar en array med resultaten för varje fold. För klassificerare använder den automatiskt 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())Välja antal folds
Fler folds (t.ex. 10) ger en mindre snedvriden uppskattning men kräver mer beräkningskraft. 5-fold är en vanlig kompromiss. För mycket små datamängder använder leave-one-out N folds där varje testmängd består av ett enda exempel.
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 för tidsseriedata
För tidsserier får du aldrig träna på framtiden. TimeSeriesSplit använder alltid tidigare data för träning och nästa block för testning och utökar träningsfönstret mellan foldsen.
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))Varför ordningen spelar roll i tidsserier
Om tidsordnade data blandas läcker framtida information in i träningen och resultaten överskattas. TimeSeriesSplit respekterar den kronologiska ordningen så att utvärderingen återspeglar verkliga prognosförhållanden.
cross_validate för flera mått
cross_validate fungerar som cross_val_score men returnerar flera mått samtidigt och kan även inkludera träningsresultat och träningstider.
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"])Tolka resultatet från cross_validate
Resultatet är en dict med nycklar som test_<metric>, train_<metric>, fit_time och score_time. Genom att jämföra tränings- och testresultat kan överanpassning diagnostiseras.
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"]))Korsvalidering och dataläckage
Anpassa alltid förbehandlingen (skalning, kodning) inuti CV-loopen, inte före den. Använd en Pipeline så att varje fold skalar med endast sina träningsdata, vilket förhindrar läckage.
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)Välja rätt strategi
Använd StratifiedKFold för klassificering, vanlig KFold för regression och TimeSeriesSplit för tidsdata. Lägg förbehandlingen i en pipeline och rapportera medelvärde samt standardavvikelse över foldsen.
Snabbtest
Testa dina kunskaper om korsvalidering.
Sammanfattning
Sammanfattning: Korsvalidering beräknar medelvärdet av prestandan över flera uppdelningar. Använd KFold för regression, StratifiedKFold för klassificering med balanserade klasser och TimeSeriesSplit för tidsdata. cross_val_score ger ett mått; cross_validate ger flera samt tidsmätningar. Förbehandla alltid inuti en Pipeline för att förhindra läckage.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 53
- Lektioner
- 225
Vanliga frågor
Är lektionen ”Strategier för korsvalidering” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lär Er AI med Python, inklusive ”Strategier för korsvalidering”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.
Vad lär jag mig i ”Strategier för korsvalidering”?
k-fold, stratified k-fold, leave-one-out och tidsserieuppdelning – när varje metod ska användas. Ni övar på Lär Er AI med Python med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Lär Er AI med Python?
Du behöver inga förkunskaper. Utbildningen i Lär Er AI med Python på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 1 av 4.
Hur lång tid tar lektionen ”Strategier för korsvalidering”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Lär Er AI med Python-lektionen?
Ja. Varje Lär Er AI med Python-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Strategier för korsvalidering
- Fördjupning i klassificeringsmått
- Grid search och random search
- Bayesiansk optimering med Optuna