Set di dati: suddivisione del set di dati originale
Tutti i progetti di ingegneria del software di qualità dedicano molta energia al
test delle app. Analogamente, ti consigliamo vivamente di testare il tuo
modello ML per determinare la correttezza delle sue previsioni.
Set di addestramento, convalida e test
Dovresti testare un modello su un insieme di esempi diverso rispetto a quelli utilizzati per addestrarlo. Come scoprirai un po' più avanti, i test su esempi diversi sono una prova più solida dell'idoneità del modello rispetto ai test sullo stesso insieme di esempi.
Da dove prendi questi diversi esempi? Tradizionalmente, nel machine learning,
si ottengono questi diversi esempi dividendo il set di dati originale. Potresti quindi assumere che sia necessario suddividere il set di dati originale in due sottoinsiemi:
Un set di test per la valutazione del
modello addestrato.
Esercizio: controlla il tuo intuito
Supponiamo che tu addestri il modello sul set di addestramento e lo valuti sul set di test
in più round. In ogni round, utilizzi i risultati del set di test
per stabilire come aggiornare gli iperparametri e l'insieme di funzionalità. Rilevi
qualcosa che non va in questo approccio? Scegli una sola risposta.
Eseguire molti cicli di questa procedura potrebbe causare un adattamento implicito del modello alle peculiarità del set di test.
Sì. Più spesso utilizzi lo stesso set di test,
più è probabile che il modello si adatti perfettamente al set di test.
Come un insegnante che "insegna per il test", il modello si adatta inavvertitamente al set di test, il che potrebbe rendere più difficile per il modello adattarsi ai dati reali.
Questo approccio è accettabile. Dopotutto, esegui l'addestramento sul set di addestramento e la valutazione su un set di test separato.
In realtà, c'è un problema sottile. Pensa a cosa potrebbe
andare storto gradualmente.
Questo approccio è inefficiente dal punto di vista computazionale. Non modificare
iperparametri o set di funzionalità dopo ogni ciclo di test.
I test frequenti sono costosi, ma fondamentali. Tuttavia, i test frequenti sono molto meno costosi della formazione aggiuntiva. L'ottimizzazione
degli iperparametri e dell'insieme di funzionalità può migliorare notevolmente
la qualità del modello, quindi pianifica sempre il tempo e le risorse di calcolo
per lavorare su questi aspetti.
Suddividere il set di dati in due insiemi è una buona idea, ma un approccio migliore è suddividerlo in tre sottoinsiemi.
Oltre al set di addestramento e al set di test, il terzo sottoinsieme è:
Un set di convalida
esegue i test iniziali sul modello durante l'addestramento.
Utilizza il set di convalida per valutare i risultati del set di addestramento.
Se l'uso ripetuto del set di convalida suggerisce che il modello fa buone previsioni, utilizza il set di test per ricontrollare il modello.
La figura seguente suggerisce questo flusso di lavoro.
Nella figura, "Modifica modello" indica la modifica di qualsiasi aspetto del modello, dalla modifica della frequenza di apprendimento all'aggiunta o alla rimozione di funzionalità, fino alla progettazione di un modello completamente nuovo da zero.
Al termine di questo flusso di lavoro, scegli il modello con il rendimento migliore nel set di test.
Il flusso di lavoro mostrato nella Figura 10 è ottimale, ma anche con questo flusso di lavoro,
i set di test e di convalida si "usurano" con l'uso ripetuto.
In altre parole, più utilizzi gli stessi dati per prendere decisioni su impostazioni degli iperparametri o altri miglioramenti del modello, meno è probabile che il modello faccia buone previsioni sui nuovi dati.
Per questo motivo, è buona norma raccogliere più dati per "aggiornare" il set di test e il set di convalida. Ricominciare da capo è un ottimo modo per resettarsi.
Esercizio: controlla il tuo intuito
Hai mescolato tutti gli esempi nel set di dati e li hai suddivisi in set di addestramento, convalida e test. Tuttavia, il valore della perdita nel set di test è così incredibilmente basso
da farti sospettare un errore. Che cosa potrebbe essere andato storto?
Molti degli esempi nel set di test sono duplicati di esempi
nel set di addestramento.
Sì. Questo può essere un problema in un set di dati con molti esempi ridondanti. Ti consigliamo vivamente di eliminare gli esempi duplicati dal
set di test prima del test.
L'addestramento e i test non sono deterministici. A volte, per caso,
la perdita del test è incredibilmente bassa. Esegui di nuovo il test per confermare il risultato.
Sebbene la perdita vari leggermente a ogni esecuzione, non dovrebbe variare così tanto da farti pensare di aver vinto la lotteria del machine learning.
Per caso, il set di test conteneva esempi su cui il
modello ha ottenuto buoni risultati.
Gli esempi sono stati mescolati bene, quindi è estremamente improbabile.
Altri problemi con i set di test
Come illustrato nella domanda precedente, gli esempi duplicati possono influire sulla valutazione del modello.
Dopo aver suddiviso un set di dati in set di addestramento, convalida e test,
elimina gli esempi nel set di convalida o nel set di test che sono duplicati di
esempi nel set di addestramento. L'unico test equo di un modello è quello con nuovi esempi, non con duplicati.
Ad esempio, prendi in considerazione un modello che prevede se un'email è spam utilizzando come funzionalità la riga dell'oggetto, il corpo dell'email e l'indirizzo email del mittente.
Supponiamo di suddividere i dati in set di addestramento e di test, con una suddivisione 80-20.
Dopo l'addestramento, il modello raggiunge una precisione del 99% sia sul set di addestramento sia sul set di test. Probabilmente ti aspetti una precisione inferiore nel set di test, quindi esamina di nuovo i dati e scopri che molti degli esempi nel set di test sono duplicati di esempi nel set di addestramento. Il problema è che
hai trascurato di rimuovere le voci duplicate per la stessa email di spam dal database di input
prima di suddividere i dati. Hai eseguito l'addestramento inavvertitamente su alcuni
degli tuoi dati di test.
In sintesi, un buon set di test o di convalida soddisfa tutti i seguenti criteri:
Abbastanza grande da produrre risultati di test statisticamente significativi.
Rappresentativo del set di dati nel suo complesso. In altre parole, non scegliere un set di test con caratteristiche diverse rispetto al set di addestramento.
Rappresentativo dei dati reali che il modello incontrerà
nel contesto della sua finalità commerciale.
Nessun esempio duplicato nel set di addestramento.
Esercizi: verifica la comprensione
Dato un singolo set di dati con un numero fisso di esempi,
quale delle seguenti affermazioni è vera?
Ogni esempio utilizzato per testare il modello è un esempio in meno utilizzato
nell'addestramento del modello.
La suddivisione degli esempi in set di addestramento, test e convalida è un gioco a somma zero.
Questo è il compromesso principale.
Il numero di esempi nel set di test deve essere maggiore
del numero di esempi nel set di convalida.
In teoria, il set di convalida e il set di test dovrebbero contenere lo stesso
numero di esempi o quasi.
Il numero di esempi nel set di test deve essere maggiore
del numero di esempi nel set di convalida o nel set di addestramento.
Il numero di esempi nel set di addestramento è in genere maggiore del numero di esempi nel set di convalida o nel set di test. Tuttavia, non sono previsti requisiti percentuali per i diversi set.
Supponiamo che il set di test contenga esempi sufficienti per eseguire un
test statisticamente significativo. Inoltre, i test eseguiti sul set di test generano una perdita ridotta. Tuttavia, il modello ha avuto un rendimento mediocre nel mondo reale. Cosa dovresti fare?
Determina in che modo il set di dati originale è diverso dai dati reali.
Sì. Anche i set di dati migliori sono solo uno snapshot dei dati reali.
I valori di ground truth
sottostanti tendono a cambiare nel tempo. Anche se il set di test corrispondeva abbastanza bene al set di addestramento da suggerire una buona qualità del modello, il set di dati probabilmente non corrisponde adeguatamente ai dati reali.
Potresti dover eseguire nuovamente l'addestramento e il test su un nuovo set di dati.
Ripeti il test sullo stesso set di test. I risultati del test potrebbero essere stati un'anomalia.
Anche se il nuovo test potrebbe produrre risultati leggermente diversi,
questa tattica probabilmente non è molto utile.
Quanti esempi deve contenere l'insieme di test?
Esempi sufficienti per generare un test statisticamente significativo.
Sì. Quanti esempi sono? Dovrai fare esperimenti.
Almeno il 15% del set di dati originale.
Il 15% potrebbe essere un numero sufficiente di esempi o meno.