Qual è la differenza tra set di test e set di validazione?


431

Ho trovato questo confuso quando uso la cassetta degli attrezzi della rete neurale in Matlab.
Ha diviso il set di dati non elaborati in tre parti:

  1. set di allenamento
  2. set di validazione
  3. set di test

Noto in molti algoritmi di allenamento o di apprendimento, i dati sono spesso divisi in 2 parti, il set di allenamento e il set di test.

Le mie domande sono:

  1. qual è la differenza tra set di validazione e set di test?
  2. Il set di validazione è davvero specifico per la rete neurale? O è facoltativo.
  3. Per andare oltre, c'è una differenza tra validazione e test nel contesto dell'apprendimento automatico?

56
Risposte alla domanda nel libro Elementi di apprendimento statistico pagina 222. Il set di convalida viene utilizzato per la selezione del modello, il set di test per il modello finale (il modello che è stato selezionato dal processo di selezione) errore di predizione.
mpiktas,

@mpiktas Ti riferisci al capitolo "Valutazione e selezione dei modelli"?
Celdor

2
Sì. Il numero di pagina era della 5a edizione stampata.
mpiktas,

13
@mpiktas è perfetto. Ecco il testo vero e proprio:The training set is used to fit the models; the validation set is used to estimate prediction error for model selection; the test set is used for assessment of the generalization error of the final chosen model. Ideally, the test set should be kept in a “vault,” and be brought out only at the end of the data analysis.
Arun

Risposte:


254

Normalmente per eseguire l'apprendimento supervisionato sono necessari due tipi di set di dati:

  1. In un set di dati (il tuo "gold standard") hai i dati di input insieme all'output corretto / previsto. Questo set di dati è solitamente debitamente preparato dagli umani o raccogliendo alcuni dati in modo semi-automatizzato. Ma è importante avere l'output previsto per ogni riga di dati qui, perché è necessario per l'apprendimento supervisionato.

  2. I dati a cui applicherai il tuo modello. In molti casi questi sono i dati a cui sei interessato per l'output del tuo modello e quindi non hai ancora alcun output "previsto" qui.

Durante l'esecuzione dell'apprendimento automatico fai quanto segue:

  1. Fase di addestramento: presentate i vostri dati dal vostro "gold standard" e formate il vostro modello, accoppiando l'input con l'output previsto.
  2. Fase di validazione / test: per stimare quanto bene è stato addestrato il tuo modello (che dipende dalla dimensione dei tuoi dati, dal valore che desideri prevedere, inserire ecc.) E per stimare le proprietà del modello (errore medio per predittori numerici, errori di classificazione per classificatori, richiamo e precisione per modelli IR ecc.)
  3. Fase di applicazione: ora applichi il tuo modello appena sviluppato ai dati del mondo reale e ottieni i risultati. Dal momento che normalmente non hai alcun valore di riferimento in questo tipo di dati (altrimenti, perché dovresti aver bisogno del tuo modello?), Puoi solo speculare sulla qualità dell'output del tuo modello usando i risultati della tua fase di validazione.

La fase di convalida è spesso suddivisa in due parti :

  1. Nella prima parte dai un'occhiata ai tuoi modelli e seleziona l'approccio più performante usando i dati di validazione (= validazione)
  2. Quindi si stima l'accuratezza dell'approccio selezionato (= test).

Da qui la separazione al 50/25/25.

Nel caso in cui non sia necessario scegliere un modello appropriato tra diversi approcci rivali, è possibile ripartizionare il set in modo da avere fondamentalmente solo set di allenamento e set di test, senza eseguire la convalida del modello addestrato. Allora li partiziono personalmente 70/30.

Vedi anche questa domanda .


21
Perché non sceglierei il modello con le migliori prestazioni in base al set di test, eliminando del tutto il set di validazione?
Sebastian Graf,

4
È a causa del sovradimensionamento? O perché vogliamo alcune statistiche indipendenti basate sul risultato del test, solo per la stima degli errori?
Sebastian Graf,

12
@Sebastian [Se si utilizza solo il set di test:] "L'errore del set di test del modello scelto finale sottostimerà l'errore di test reale, a volte in modo significativo" [Hastie et al]
user695652

23
Il set di convalida viene spesso utilizzato per ottimizzare gli iperparametri. Ad esempio, nella comunità del deep learning, l'ottimizzazione delle dimensioni del livello di rete, il numero di unità nascoste, il termine di regolarizzazione (se L1 o L2) dipende dal set di convalida
xiaohan2012

2
Qual è il modo corretto di dividere i set? La selezione dovrebbe essere casuale? Cosa succede se si dispone di immagini simili? Questo danno non danneggerà la tua capacità di generalizzare? Se hai due set presi in posizioni separate non sarebbe meglio prenderne uno come set di allenamento e l'altro come set di test?
Yonatan Simson,

263

Set di allenamento: un set di esempi utilizzati per l'apprendimento: per adattarsi ai parametri del classificatore Nel caso Multistrato Perceptron (MLP), utilizzeremmo il set di allenamento per trovare i pesi "ottimali" con la regola del back-prop

Set di convalida: un set di esempi utilizzati per ottimizzare i parametri di un classificatore Nel caso MLP, utilizzeremmo il set di convalida per trovare il numero "ottimale" di unità nascoste o determinare un punto di arresto per l'algoritmo di back-propagation

Set di test: un set di esempi utilizzato solo per valutare le prestazioni di un classificatore completamente addestrato Nel caso MLP, utilizzeremo il test per stimare il tasso di errore dopo aver scelto il modello finale (dimensioni MLP e pesi effettivi) Dopo aver valutato il modello finale sul set di test, NON DEVI mettere a punto il modello!

Perché separare set di test e validazione? La stima del tasso di errore del modello finale sui dati di convalida sarà distorta (inferiore alla percentuale di errore reale) poiché il set di convalida viene utilizzato per selezionare il modello finale Dopo aver valutato il modello finale sul set di test, NON DEVI mettere a punto il modello ulteriore!

fonte: Introduzione all'analisi dei modelli, Ricardo Gutierrez-OsunaTexas A&M University, Texas A&M University


42
+1 per "NON DEVI sintonizzare ulteriormente il modello!"
stmax,

6
Qual è la differenza tra "adatta i parametri" e "ottimizza i parametri"?
Metariat,

18
@stmax Non essere pedanti, ma una volta che abbiamo il nostro errore di test finale e NON siamo soddisfatti del risultato, cosa facciamo se non riusciamo a sintonizzare ulteriormente il nostro modello? ... Mi sono spesso chiesto di questo caso.
Spacey,

5
@Tarantula puoi continuare a ottimizzare il modello, ma dovrai raccogliere un nuovo set di test. Ovviamente nessuno lo fa;) ma violarlo (specialmente quando lo ripeti più volte) potrebbe portare il tuo modello a adattarsi al set di test - il che si traduce in punteggi non realistici / troppo ottimisti.
stmax,

4
Penso che questa nomenclatura sia confusa. Hai ragione a dire "NON DEVI mettere a punto il modello" dopo aver usato il set di test, ma ... quale area intendevi fare? Smetti di lavorarci? In realtà è necessaria un'intera gerarchia di set di test. 1: set di validazione - usato per mettere a punto un modello, 2: set di test, usato per valutare un modello e vedere se dovresti tornare al tavolo da disegno, 3: set di super-test, usato sull'algoritmo final-final per vedere come è buono, 4: set di hyper-test, usato dopo che i ricercatori hanno sviluppato algoritmi MNIST per 10 anni per vedere quanto
follemente si adattano

66

La mia esperienza di 5 anni in Informatica mi ha insegnato che niente è meglio della semplicità.

Il concetto di set di dati "Formazione / Convalida incrociata / Test" è semplice come questo. Quando si dispone di un set di dati di grandi dimensioni, si consiglia di dividerlo in 3 parti:

++ Set di formazione (60% del set di dati originale): viene utilizzato per creare il nostro algoritmo di previsione. Il nostro algoritmo tenta di sintonizzarsi sulle stranezze dei set di dati di addestramento. In questa fase di solito creiamo algoritmi multipli per confrontare le loro prestazioni durante la fase di convalida incrociata.

++ Set di convalida incrociata (20% del set di dati originale): questo set di dati viene utilizzato per confrontare le prestazioni degli algoritmi di previsione creati in base al set di training. Scegliamo l'algoritmo che ha le migliori prestazioni.

++ Set di test (20% del set di dati originale): ora abbiamo scelto il nostro algoritmo di previsione preferito ma non sappiamo ancora come funzionerà su dati del mondo reale completamente invisibili. Quindi, applichiamo il nostro algoritmo di predizione prescelto sul nostro set di test per vedere come funzionerà in modo da poter avere un'idea delle prestazioni del nostro algoritmo su dati invisibili.

Appunti:

-È molto importante tenere presente che non è consigliabile saltare la fase di test, poiché l'algoritmo che ha funzionato bene durante la fase di convalida incrociata non significa che sia veramente il migliore, perché gli algoritmi vengono confrontati in base alla croce -validation set e sue stranezze e rumori ...

-Durante la fase di test, lo scopo è vedere come il nostro modello finale si occuperà in natura, quindi nel caso in cui le sue prestazioni siano molto scarse dovremmo ripetere l'intero processo a partire dalla fase di addestramento.


1
è facile e confuso fare riferimento agli insiemi come fasi e viceversa.
Matt O'Brien,

2
@innovIsmail Cosa succede se salto il passaggio di convalida? Supponiamo di avere molti algoritmi e di averli addestrati sul set di treni, quindi li applico tutti sul set di test, quindi
scelgo

3
Mi sembra che tu stia semplicemente saltando il passaggio del test.
Mihai Danila,

1
> confronta le prestazioni degli algoritmi di predizione - che cos'è "un algoritmo" in questo contesto? il tuo modello non è un algoritmo? bisogna costruire diversi modelli e addestrarli separatamente per ottenere diverse fasi da validare?
Boppity Bop,

2
Questa semplicità è un'illusione perché nella situazione non enorme delle dimensioni del campione si otterranno algoritmi predittivi e risultati di convalida sostanzialmente diversi se le divisioni casuali fossero ripetute.
Frank Harrell,

33

Ad ogni passaggio che ti viene chiesto di prendere una decisione (ad esempio, scegli un'opzione tra diverse opzioni), devi disporre di un set / partizione aggiuntivo per valutare l'accuratezza della tua scelta in modo da non scegliere semplicemente il risultato più favorevole di casualità e scambiare la coda della distribuzione per il centro 1 . La sinistra è il pessimista. Il diritto è l'ottimista. Il centro è il pragmatico. Sii il pragmatico.

inserisci qui la descrizione dell'immagine

Passaggio 1) Formazione: ogni tipo di algoritmo ha le proprie opzioni di parametro (il numero di strati in una rete neurale, il numero di alberi in una foresta casuale, ecc.). Per ciascuno dei tuoi algoritmi, devi scegliere un'opzione. Ecco perché hai un set di allenamento.

Passaggio 2) Convalida: ora hai una raccolta di algoritmi. Devi scegliere un algoritmo. Ecco perché hai un set di test. Molte persone scelgono l'algoritmo che funziona meglio sul set di validazione (e va bene). Ma se non si misura il tasso di errore dell'algoritmo con le migliori prestazioni sul set di test e si va semplicemente con il suo tasso di errore sul set di validazione, allora si è erroneamente confuso lo "scenario migliore possibile" con lo "scenario più probabile". Questa è una ricetta per il disastro.

Passaggio 3) Test: suppongo che se i tuoi algoritmi non avessero parametri, non avresti bisogno di un terzo passaggio. In tal caso, il passaggio di convalida sarebbe il passaggio di test. Forse Matlab non ti chiede parametri o hai scelto di non usarli e questa è la fonte della tua confusione.

1 È spesso utile andare in ciascuna fase con l'ipotesi (ipotesi nulla) che tutte le opzioni siano uguali (ad esempio, tutti i parametri sono uguali o tutti gli algoritmi sono uguali), quindi il mio riferimento alla distribuzione.

2 Questa immagine non è mia. L'ho preso da questo sito: http://www.teamten.com/lawrence/writings/bell-curve.png


3
Penso che la prima frase catturi la risposta fondamentale a questa domanda meglio di qualsiasi altra risposta. "Ad ogni passaggio che ti viene chiesto di prendere una decisione (ad esempio, scegli un'opzione tra diverse opzioni), devi disporre di un set / partizione aggiuntivo per misurare l'accuratezza della tua scelta ..."
kobejohn,

In questione: se voglio trovare il miglior RandomForest (RF) e fingere che ci sia un solo iper parametro di RF, che è il numero di alberi (N), quindi nel passaggio 1, eseguo molte RF con N diverso per costruire la foresta ; nel passaggio 2, applicarli sul test di convalida e selezionare la RF con N * che fornisce l'errore più basso rispetto al test di convalida, quindi nel passaggio 3, applico RF con N * al set di test e ottengo una stima imparziale dell'errore di test reale di questo RF con N *. Ma potrei applicare tutte le mie RF sul set di test e scegliere quella con l'errore di test più basso, che potrebbe non essere N *. Quindi questo è il punto di fare la validazione step2?
Kevin Kim del

1
@KevinKim: se applichi il tuo set di test a tutte le RF e usi i risultati per fare un'ulteriore scelta (scegli un altro modello), hai appena ripetuto il passaggio di validazione. Hai deciso "Ho bisogno di ottenere l'errore più basso con un modello!". Questo è il punto di addestramento e convalida, NON test. Il test riguarda solo: ho addestrato e scelto un modello, ora vediamo come si comporta "in generale". Ovviamente il set di test "generale" è solo un'altra fetta di dati che possono essere o meno adattati, ma il punto è che NON hai consapevolmente sovralimentato il tuo modello con delle scelte.
Honeybear

La suddivisione in tre parti è solo un approccio molto comune (A) per darti un'idea di come il modello generalizza (B) con sforzo limitato e (C) dati osservati limitati. Se vuoi fare meglio in termini di (B), puoi fare quello che stai suggerendo: Usa diversi set di validazione per perfezionare la generalizzazione. Con dati limitati che si chiamano validazione incrociata: ripetere l'addestramento e la convalida con diversi training e set di test (per le reti neurali in cui l'allenamento può richiedere settimane questo non è una cosa).
Honeybear

1
MA: come si esibirà il modello "nel mondo reale" è ancora sconosciuto. È solo un presupposto validato e testato, che funzionerà bene su dati invisibili e per scopi scientifici questo è generalmente considerato sufficiente. Se ora vai di nuovo e generi e scegli modelli, fino a quando uno si adatta perfettamente al set di validazione E al set di test, allora hai degenerato il tuo set di test in un set di validazione. Meglio fare la convalida incrociata per questo. Nel caso in cui le prestazioni siano costantemente significativamente peggiori sul set di test, è sempre un'opzione che i dati vengano semplicemente suddivisi in modo errato e si vorrebbe riavviare con set ri-mescolati.
Honeybear

21

Non ne consegue che è necessario dividere i dati in alcun modo. Il bootstrap può fornire stime dell'errore al quadrato medio più piccole dell'accuratezza della previsione usando l'intero campione sia per lo sviluppo che per il test del modello.


1
Quindi non si sostiene la convalida incrociata attraverso la divisione di set di dati di grandi dimensioni per test / convalida del modello predittivo?
OFish

9
No, a meno che il set di dati non sia enorme o il segnale: il rapporto di rumore è elevato. La convalida incrociata non è precisa come il bootstrap nella mia esperienza e non utilizza l'intera dimensione del campione. In molti casi è necessario ripetere la convalida incrociata 50-100 volte per ottenere un'adeguata precisione. Ma nei tuoi set di dati hanno> 20.000 argomenti, approcci semplici come la convalida del campione diviso sono spesso OK.
Frank Harrell,

2
È davvero bello saperlo! Grazie. E proveniente da te, è un'ottima "fonte" di informazioni. Saluti!
OFish

1
La validazione split-sample spesso ha prestazioni peggiori rispetto al rigoroso bootstrap. Crea un look bootstrap esterno che ripete tutti i passaggi di apprendimento supervisionato (tutti i passaggi che utilizzano Y). Il bootstrap di ottimismo Efron-Gong stima quanto il modello predittivo cada a pezzi nei dati non visti dall'algoritmo, senza trattenere i dati.
Frank Harrell,

1
Sì, con enfasi sulla ripetizione . È la singola divisione che è problematica.
Frank Harrell,

13

Un'attività tipica di apprendimento automatico può essere visualizzata come il seguente ciclo nidificato:

while (error in validation set > X) {
    tune hyper-parameters
    while (error in training set > Y) {
        tune parameters
    }
}

Tipicamente, il ciclo esterno viene eseguito dall'essere umano , sul set di convalida , e il circuito interno da macchina , sul set di addestramento . È quindi necessario un terzo set di test per valutare le prestazioni finali del modello.

In altre parole, il set di validazione è il set di addestramento per umani.


9

Un modo di pensare a questi tre set è che due ( traininge validation) provengono dal passato, mentre il testset viene dal "futuro". Il modello dovrebbe essere costruito e messo a punto utilizzando i dati del "passato" ( training/ validationdati), ma mai i testdati che provengono dal "futuro".

Per fare un esempio pratico, supponiamo che stiamo costruendo un modello per prevedere quanto bene faranno i giocatori di baseball in futuro. Useremo i dati dal 1899-2014 per creare un teste validationimpostare. Una volta che il modello è stato costruito e ottimizzato su tali dati, utilizzeremo i dati del 2015 (in realtà in passato!) Come set di test, che dal punto di vista del modello appaiono come dati "futuri" e non hanno influenzato in alcun modo la creazione del modello . (Ovviamente, in teoria, potremmo aspettare i dati dal 2016 se vogliamo davvero!)

Ovviamente sto usando le virgolette dappertutto, perché l'attuale ordine temporale dei dati potrebbe non coincidere con il futuro reale (per definizione probabilmente tutta la generazione dei dati è avvenuta nel passato reale). In realtà, il testset potrebbe essere semplicemente un dato dello stesso periodo del training/ validationset, che "tieni". In questo modo, non ha avuto alcuna influenza sull'ottimizzazione del modello, ma questi dati non vengono effettivamente dal futuro.


4
Dopo aver letto tutte le altre risposte, questa risposta mi ha fatto "fare clic" per me! Ti alleni con il set di treni, verifica che non ti stai adattando al set di convalida (e che il modello e gli iperparametri funzionino con "dati sconosciuti"), quindi valuta con il set di test - "nuovi dati" - se ora avere qualche potere predittivo ..!
stolsvik,

Questo è un modo giusto di guardarlo nel senso che il test dati non dovrebbero mai far parte del processo di formazione: e se li trattiamo come dati "futuri", allora diventa un errore impossibile da fare.
javadba,

7

La maggior parte degli algoritmi di data mining supervisionati segue questi tre passaggi:

  1. Il set di addestramento viene utilizzato per costruire il modello. Questo contiene un set di dati che ha variabili target e predittive preclassificate.
  2. In genere un set di dati o set di test di blocco viene utilizzato per valutare la capacità del modello con i dati al di fuori del set di addestramento. Il set di test contiene i dati dei risultati preclassificati ma non vengono utilizzati quando i dati del set di test vengono eseguiti attraverso il modello fino alla fine, quando i dati preclassificati vengono confrontati con i risultati del modello. Il modello è regolato per ridurre al minimo l'errore sul set di test.
  3. Un altro set di dati di blocco o set di convalida viene utilizzato per valutare il modello corretto nella fase 2, dove, ancora una volta, i dati del set di convalida vengono eseguiti rispetto al modello modificato e ai risultati rispetto ai dati preclassificati non utilizzati.

4

Alcune persone sono confuse sul perché utilizziamo un set di convalida, quindi fornirò una spiegazione semplice e intuitiva di ciò che accadrà se non si utilizza un set di dati di convalida.

Se non si utilizza un set di convalida, sarà invece necessario selezionare gli iperparametri e decidere quando interrompere l'allenamento in base alle prestazioni del modello nel set di dati di test. Se si decide quando interrompere l'allenamento in base alle prestazioni del modello nel set di dati di test, è possibile interrompere l'allenamento quando il modello riesce a fare bene sul set di dati di test. Quindi, quando si segnalano i risultati, si segnala l'accuratezza sul set di dati di test. Il problema con questo è che potresti dire che il tuo modello ha funzionato davvero bene quando in realtà era solo una variazione casuale che lo ha fatto fare meglio solo sul set di test.

Se invece si utilizza un set di convalida per decidere quando interrompere l'allenamento, l'accuratezza del modello sul set di test riflette più in modo imparziale quanto bene si comporta sull'attività in generale e mostra che non è stato ottimizzato il modello solo per funzionare bene sul set di test.


2

Vorrei aggiungere altre ottime risposte qui indicando un approccio relativamente nuovo nell'apprendimento automatico chiamato "privacy differenziale" (vedi articoli di Dwork; il Blog di Win Vector per ulteriori informazioni). L'idea consente di riutilizzare effettivamente il set di test senza compromettere le prestazioni del modello finale. In un'impostazione tipica il set di test viene utilizzato solo per stimare le prestazioni finali; idealmente non è nemmeno permesso guardarlo.

Come è ben descritto in questo blog di Win Vector (vedi anche altre voci), è possibile "usare" il set di test senza influenzare le prestazioni del modello. Questo viene fatto usando la speciale procedura chiamata "privacy differenziale". Lo studente non avrà accesso diretto al set di test.


-1

La mia idea è che quelle opzioni nella casella degli strumenti della rete neurale sono per evitare un eccesso di adattamento. In questa situazione i pesi sono specificati solo per i dati di allenamento e non mostrano la tendenza globale. Avendo un set di convalida, le iterazioni sono adattabili a dove diminuzioni dell'errore dei dati di addestramento causano diminuzioni nei dati di convalida e aumenti dell'errore dei dati di convalida; insieme alla diminuzione dell'errore dei dati di allenamento, questo dimostra il fenomeno del sovradimensionamento.


Oserei dire che i set di test aggiungono un controllo di integrità all'intero processo. Puoi avere una curva di allenamento che replica la curva di validazione / perdita ad ogni epoca. Ma se la precisione del set di test non migliora con le epoche o i carri armati, non si va bene. Ti stai adattando troppo.
agcala,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.