Validation Data
I dati di validazione sono una suddivisione tenuta da parte e valutata durante lo sviluppo per regolare gli iperparametri, scegliere i checkpoint e rilevare l’overfitting prima del test finale.
I dati di validazione sono una parte dei dati etichettati esclusa dal training e valutata ripetutamente durante lo sviluppo per confrontare i modelli, ottimizzare gli iperparametri, scegliere i checkpoint e rilevare l'overfitting. I pesi del modello non vengono mai aggiornati su questi dati, quindi il punteggio di validazione mostra quanto bene ciò che il modello ha appreso dai dati di training si generalizza a immagini mai viste. «Validation set» e «development set» («dev set») sono sinonimi. Ogni decisione basata sui punteggi di validazione adatta un po' di più il modello a quella specifica suddivisione: per questo si tiene da parte un test set separato per la stima finale e imparziale.
Suddivisioni in set di addestramento, convalida e test#
Un dataset etichettato viene solitamente diviso in tre parti:
- Insieme di training: Gli esempi su cui l'ottimizzatore adatta i pesi, in genere il 70-80% dei dati.
- Insieme di validazione: Viene valutato dopo le esecuzioni di training o al termine di ogni epoca, per orientare scelte come il tasso di apprendimento, le dimensioni del modello, l'intensità dell'aumento dei dati e il momento in cui interrompere il training.
- Insieme di test: Viene valutato una sola volta, dopo aver fissato tutte le scelte, per stimare le prestazioni attese nel mondo reale.
Per dataset di migliaia di immagini sono comuni suddivisioni 70/15/15 o 80/10/10. I dataset molto grandi richiedono una quota inferiore per ottenere stime affidabili: ImageNet-1k riserva 50.000 immagini per la validazione, a fronte di 1.281.167 immagini di training. Poiché le etichette del test set non sono pubbliche, l'accuratezza su ImageNet viene convenzionalmente riportata su questo insieme di validazione, che funge quindi da test set.
Un buon set di validazione corrisponde ai dati che il modello incontrerà in produzione e non condivide alcun elemento con il set di addestramento. Le suddivisioni casuali a livello di immagine causano perdite di informazioni quando più immagini provengono dallo stesso video, paziente o luogo, perché il modello può riconoscere la scena anziché l'oggetto. Suddividere per gruppo, ad esempio per paziente o sessione di registrazione, impedisce questa fuga di dati.
Ottimizzazione degli iperparametri e selezione del modello#
I pesi si apprendono tramite discesa del gradiente, mentre gli iperparametri si scelgono addestrando diversi candidati e mantenendo quello con il miglior punteggio di validazione. I punteggi di training non possono guidare questa scelta, perché i modelli più grandi e addestrati più a lungo si adattano quasi sempre meglio ai dati di training. Lo script scikit-learn qui sotto ottimizza la profondità di un albero decisionale sul dataset di cifre incluso:
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
# Split 1,797 digit images 60/20/20 into training, validation, and test sets
X, y = load_digits(return_X_y=True)
X_train, X_rest, y_train, y_rest = train_test_split(X, y, test_size=0.4, random_state=0, stratify=y)
X_val, X_test, y_val, y_test = train_test_split(X_rest, y_rest, test_size=0.5, random_state=0, stratify=y_rest)
# Fit one model per candidate tree depth and score each on the validation set
val_scores = {}
for depth in (2, 4, 8, 16):
model = DecisionTreeClassifier(max_depth=depth, random_state=0).fit(X_train, y_train)
val_scores[depth] = model.score(X_val, y_val)
print(f"depth {depth}: train {model.score(X_train, y_train):.3f}, validation {val_scores[depth]:.3f}")
# Refit the winner and score the test set exactly once
best = max(val_scores, key=val_scores.get)
final = DecisionTreeClassifier(max_depth=best, random_state=0).fit(X_train, y_train)
print(f"Chosen depth {best}: test accuracy {final.score(X_test, y_test):.3f}")L'accuratezza di training continua a crescere con la profondità e raggiunge 1.000 alla profondità 16, mentre quella di validazione tocca il massimo di 0.836 alla profondità 8 e scende a 0.825 alla profondità 16, quando l'albero inizia a memorizzare i dati. La validazione seleziona la profondità 8, che ottiene un punteggio di 0.853 sul test set mai utilizzato.
Early stopping e selezione dei checkpoint#
I cicli di training del deep learning valutano di solito l'insieme di validazione al termine di ogni epoca. La loss di training continua a diminuire man mano che la rete si adatta sempre meglio ai dati di training, ma la loss o l'accuratezza di validazione alla fine si stabilizzano e poi peggiorano. L'early stopping interrompe il training quando il punteggio di validazione non migliora per un numero prestabilito di epoche, detto pazienza, e conserva i pesi dell'epoca migliore.
Per impostazione predefinita, il training di YOLO26 in Ultralytics esegue questo ciclo: valuta la suddivisione val del file YAML del dataset dopo ogni epoca, salva l'epoca con il valore più alto di fitness di validazione (mAP50-95 per il rilevamento) come best.pt e si interrompe dopo patience epoche senza miglioramenti, 100 per impostazione predefinita.
from ultralytics import YOLO
# Carica un rilevatore nano YOLO26 pretrained
model = YOLO("yolo26n.pt")
# Valida sulla suddivisione val dopo ogni epoca e interrompi dopo 10 epoche senza miglioramenti
results = model.train(data="coco8.yaml", epochs=50, patience=10)Cross-validation per dataset piccoli#
Quando i dati sono scarsi, una singola suddivisione tenuta da parte spreca esempi e produce un punteggio instabile. La cross-validation K-fold divide i dati in K fold, addestra K modelli ciascuno dei quali tiene da parte un fold diverso per la validazione e calcola la media dei K punteggi: ogni esempio viene così usato sia per il training sia per la validazione. Sono comuni cinque e dieci fold; le varianti stratificate e raggruppate mantengono bilanciate le proporzioni delle classi o raggruppano immagini correlate all'interno di ciascun fold. Un test set rimane comunque separato da tutti i fold.
Dati di validazione e termini correlati#
- Dati di test: Vengono valutati una sola volta alla fine. Riutilizzarli per prendere decisioni li trasforma in un secondo insieme di validazione e il loro punteggio non è più una stima imparziale.
- Dati di training: L'unica suddivisione da cui l'ottimizzatore apprende i pesi.
- Cross-validation: Procedura che alterna gli esempi usati come dati di validazione, ottenendo K punteggi di validazione da un unico dataset.
- Validazione nella documentazione clinica e normativa: In medicina e nei settori regolamentati, validare un modello spesso significa valutare il modello finito su dati esterni indipendenti, equivalenti al test set nella terminologia del machine learning.










