0Pricing
Learn AI with Python · Lezione

Strategie di cross-validation

k-fold, k-fold stratificato, leave-one-out e suddivisione per serie temporali: quando utilizzare ciascuno.

Strategie di cross-validation è una lezione Learn AI with Python gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn AI with Python, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn AI with Python include 4 lezioni in totale.

Perché usare la convalida incrociata

Una singola suddivisione tra addestramento e test può essere fortunata o sfortunata. La convalida incrociata ripete la valutazione su suddivisioni diverse e calcola la media dei punteggi, fornendo una stima più affidabile delle prestazioni.

Convalida incrociata K-Fold

KFold suddivide i dati in K parti uguali. Ogni fold viene utilizzato una volta come set di test, mentre gli altri servono per addestrare il modello. Si ottengono K punteggi da mediare.

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

Stratified K-Fold per la classificazione

Nella classificazione, un normale K-Fold può produrre fold con rapporti tra le classi sbilanciati. StratifiedKFold mantiene le proporzioni tra le classi in ogni 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
    pass

La scorciatoia cross_val_score

cross_val_score esegue l'intero ciclo al posto Suo e restituisce un array di punteggi, uno per ogni fold. Per i classificatori utilizza automaticamente 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())

Scegliere il numero di fold

Un numero maggiore di fold (ad es. 10) fornisce una stima meno distorta, ma richiede più risorse di calcolo. La convalida a 5 fold rappresenta un compromesso comune. Per dataset molto piccoli, il leave-one-out utilizza N fold, ciascuno dei quali ha un solo campione nel set di test.

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 per i dati temporali

Per le serie temporali non bisogna mai addestrare il modello sui dati futuri. TimeSeriesSplit utilizza sempre i dati passati per l'addestramento e il blocco successivo per il test, ampliando la finestra di addestramento tra i vari fold.

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

Perché l'ordine è importante nelle serie temporali

Mescolare dati ordinati temporalmente fa filtrare informazioni future nell'addestramento e gonfia i punteggi. TimeSeriesSplit rispetta l'ordine cronologico, quindi la valutazione rispecchia le reali condizioni di previsione.

cross_validate per più metriche

cross_validate è simile a cross_val_score, ma restituisce più metriche contemporaneamente e può includere i punteggi di addestramento e i tempi di adattamento.

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

Interpretare l'output di cross_validate

Il risultato è un dizionario con chiavi come test_<metric>, train_<metric>, fit_time e score_time. Il confronto tra i punteggi di addestramento e di test aiuta a diagnosticare l'overfitting.

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

Convalida incrociata e data leakage

Esegua sempre il preprocessing (scaling, codifica) all'interno del ciclo di convalida incrociata, non prima. Utilizzi una Pipeline, in modo che ogni fold esegua lo scaling utilizzando solo i propri dati di addestramento e prevenga il leakage.

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)

Scegliere la strategia giusta

Utilizzi StratifiedKFold per la classificazione, il normale KFold per la regressione e TimeSeriesSplit per i dati temporali. Incapsuli il preprocessing in una pipeline e riporti la media e la deviazione standard calcolate sui vari fold.

Verifica rapida

Verifichi le Sue conoscenze sulla convalida incrociata.

Riepilogo

Riepilogo: la convalida incrociata calcola la media delle prestazioni su più suddivisioni. Utilizzi KFold per la regressione, StratifiedKFold per la classificazione bilanciata e TimeSeriesSplit per i dati temporali. cross_val_score restituisce una metrica; cross_validate ne restituisce diverse, oltre ai tempi di esecuzione. Esegua sempre il preprocessing all'interno di una Pipeline per prevenire il leakage.

Domande Frequenti

La lezione «Strategie di cross-validation» è gratuita?

Sì — il testo completo di «Strategie di cross-validation» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn AI with Python, passa a CoddyKit PRO. Il corso Learn AI with Python include 4 lezioni in totale.

Cosa imparerò in «Strategie di cross-validation»?

k-fold, k-fold stratificato, leave-one-out e suddivisione per serie temporali: quando utilizzare ciascuno. Eserciti Learn AI with Python con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Learn AI with Python?

Non è richiesta alcuna esperienza precedente. Learn AI with Python su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Strategie di cross-validation»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Learn AI with Python?

Sì. Ogni lezione Learn AI with Python include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Strategie di cross-validation
  2. Approfondimento sulle metriche di classificazione
  3. Grid search e random search
  4. Ottimizzazione bayesiana con Optuna
← Torna a Learn AI with Python