Esiste una regola empirica per come dividere un set di dati in set di training e validazione?


194

Esiste una regola empirica su come suddividere al meglio i dati in set di training e validazione? È consigliabile una divisione pari al 50/50? O ci sono chiari vantaggi di avere più dati di formazione rispetto ai dati di validazione (o viceversa)? O questa scelta dipende praticamente dall'applicazione?

Ho usato principalmente un 80% / 20% di dati di addestramento e validazione, rispettivamente, ma ho scelto questa divisione senza alcun motivo di principio. Qualcuno che ha più esperienza nell'apprendimento automatico può consigliarmi?


Se non disponi di troppi dati disponibili, considera en.wikipedia.org/wiki/Resampling_(statistics)#Jackknife
nair.ashvin

Risposte:


221

Esistono due problemi concorrenti: con meno dati di allenamento, le stime dei parametri hanno una varianza maggiore. Con meno dati di test, la statistica delle prestazioni avrà una varianza maggiore. In generale, dovresti preoccuparti di dividere i dati in modo tale che nessuna varianza sia troppo elevata, il che ha più a che fare con il numero assoluto di istanze in ciascuna categoria piuttosto che con la percentuale.

Se hai un totale di 100 istanze, probabilmente sei bloccato con la convalida incrociata poiché nessuna singola divisione ti darà una varianza soddisfacente nelle tue stime. Se hai 100.000 istanze, non importa se scegli una divisione 80:20 o una divisione 90:10 (in effetti puoi scegliere di utilizzare meno dati di allenamento se il tuo metodo è particolarmente intenso dal punto di vista computazionale).

Supponendo che si disponga di dati sufficienti per eseguire correttamente i dati di test (piuttosto che la convalida incrociata), di seguito è riportato un modo istruttivo per comprendere le variazioni:

  1. Dividi i tuoi dati in formazione e test (80/20 è davvero un buon punto di partenza)
  2. Dividi i dati di allenamento in addestramento e validazione (di nuovo, 80/20 è una divisione equa).
  3. Sottocampiona le selezioni casuali dei tuoi dati di allenamento, addestra il classificatore con questo e registra le prestazioni sul set di validazione
  4. Prova una serie di corse con diverse quantità di dati di allenamento: campiona casualmente il 20% di esso, diciamo, 10 volte e osserva le prestazioni sui dati di validazione, quindi fai lo stesso con 40%, 60%, 80%. Dovresti vedere sia prestazioni migliori con più dati, ma anche una varianza inferiore tra i diversi campioni casuali
  5. Per comprendere la varianza dovuta alla dimensione dei dati del test, eseguire la stessa procedura al contrario. Allenati su tutti i tuoi dati di allenamento, quindi campiona casualmente una percentuale dei tuoi dati di validazione un numero di volte e osserva le prestazioni. Ora dovresti scoprire che le prestazioni medie su piccoli campioni dei tuoi dati di validazione sono all'incirca le stesse delle prestazioni su tutti i dati di validazione, ma la varianza è molto più alta con un numero minore di campioni di test

Grazie, anche questo è molto utile! Ci proverò. Cordiali saluti, ho circa 6000 istanze di dati di allenamento. Sto usando SVM, quindi le prestazioni sono un po 'un problema.
rapina il

1
FWIW, la varianza nelle prestazioni può essere calcolata classificando tutte le istanze una volta, segnando le decisioni sul fatto che siano corrette o meno e quindi campionando queste decisioni anziché le istanze di test per produrre gli effetti dell'uso di diverse dimensioni del set di test
Ben Allison

E 6000 casi dovrebbero essere sufficienti a non rendere le differenze tra l'utilizzo del 10% o del 20% per i test (puoi confermarlo usando il metodo che descrivo)
Ben Allison,

1
Ciao di nuovo. Sono un po 'confuso al punto 5. Hai detto "quindi campiona casualmente una percentuale dei tuoi dati di validazione un numero di volte". Volevi vedere invece i dati dei test ? Se ho capito bene, dovrei prima dividere i miei dati in set di dati di training e test, quindi ulteriormente parte di alcuni dei miei set di dati di training in un set di dati di validazione. Quindi, nel passaggio 5, se sto misurando la varianza nei miei dati di test, non dovrei campionare casualmente popolazioni dai miei dati di test? Oppure mi sfugge qualcosa?
rapina il

2
Il punto è che mentre stai giocando con i parametri, osservando gli effetti del cambiamento delle cose, dovresti usare i tuoi dati di validazione per testare. Se inizi a guardare i tuoi dati di test e scegli strategie basate su ciò che ti dà il punteggio più alto, otterrai un senso gonfiato delle prestazioni del tuo metodo. Dopo aver impostato tutti i parametri e preso le decisioni, esegui i dati del test. Questo ti consente di sapere che tipo di performance otterrai su dati veramente nuovi, non osservati (che è probabilmente quello che ti interessa!)
Ben Allison,

54

Saresti sorpreso di scoprire che 80/20 è un rapporto abbastanza comune, spesso indicato come principio di Pareto . Di solito è una scommessa sicura se si utilizza quel rapporto.

Tuttavia, a seconda della metodologia di addestramento / convalida utilizzata, il rapporto potrebbe cambiare. Ad esempio: se usi la convalida incrociata di 10 volte, finiresti con un set di validazione del 10% per ogni piega.

Sono state condotte delle ricerche su quale sia il giusto rapporto tra il set di training e il set di validazione :

La frazione di pattern riservata per il set di validazione dovrebbe essere inversamente proporzionale alla radice quadrata del numero di parametri regolabili liberi.

In conclusione, specificano una formula:

Set di convalida (v) su set di addestramento (t) rapporto dimensioni, v / t, scale come ln (N / h-max), dove N è il numero di famiglie di riconoscitori e h-max è la maggiore complessità di quelle famiglie.

Cosa significano per complessità è:

Ogni famiglia di riconoscitori è caratterizzata dalla sua complessità, che può o meno essere correlata alla dimensione VC , alla lunghezza della descrizione, al numero di parametri regolabili o ad altre misure di complessità.

Prendendo la prima regola empirica (il set di validazione dovrebbe essere inversamente proporzionale alla radice quadrata del numero di parametri regolabili liberi), puoi concludere che se hai 32 parametri regolabili, la radice quadrata di 32 è ~ 5,65, la frazione dovrebbe essere 1 / 5,65 o 0,177 (v / t). Circa il 17,7% dovrebbe essere riservato per la convalida e l'82,3% per la formazione.


2
Il documento, per coloro che potrebbero avere problemi a caricarlo come me (non so perché), è: "Una legge di ridimensionamento per le dimensioni del rapporto di addestramento impostato per la validazione" (I. Guyon, 1996, Rapporto tecnico non pubblicato, AT&T Bell Laboratories ).
forestecologo il

3
Ha senso la regola empirica? Se hai due parametri regolabili, il rapporto è 0,77, il che significa che per la validazione dovresti usare il 77%. Imho il problema è la definizione del parametro gratuito. Per un SVM lineare è possibile impostare il parametro di penalità C per il termine di errore che è un parametro, ma la complessità è maggiore Dimensione + 1 per un SVM.
Reed Richards,

4
Quindi la mia dimensione del test dovrebbe essere 1 se ho una rete neurale ..?
YellowPillow,

51

L'anno scorso ho seguito il corso di apprendimento automatico online del Prof: Andrew Ng. La sua raccomandazione era:

Allenamento : 60%

Convalida incrociata : 20%

Test : 20%


20
coursera.org/learn/deep-neural-network/lecture/cxG1s/… in the modern big data era, where, for example, you might have a million examples in total, then the trend is that your dev (cross validation) and test sets have been becoming a much smaller percentage of the total. Suggerisce che potrebbe essere 99.5: 0.25: 0.25.
Nobu,

9

Bene, dovresti pensare a un'altra cosa.

Se disponi di un set di dati davvero grande, come 1.000.000 di esempi, dividere l'80 / 10/10 potrebbe non essere necessario, perché non è necessario il 10% = 100.000 di esempi per dire che il modello funziona bene.

Forse 99 / 0,5 / 0,5 è sufficiente, perché 5.000 esempi possono rappresentare la maggior parte della varianza nei dati e puoi facilmente dire che il modello funziona bene sulla base di questi 5.000 esempi in test e sviluppo.


Lo 0,5% nel set di validazione potrebbe essere sufficiente, ma direi che stai correndo un rischio grande e non necessario poiché non sai che è abbastanza o no. L'allenamento può facilmente andare storto se si utilizza un set di convalida troppo piccolo, ma è quasi impossibile sbagliare utilizzando un set di convalida di grandi dimensioni.
Björn Lindqvist,

2

Supponiamo di avere meno dati, suggerisco di provare il 70%, l'80% e il 90% e di testare che sta dando risultati migliori. Nel caso del 90% ci sono possibilità che per un test del 10% si ottenga una scarsa precisione.


1

Forse un 63,2% / 36,8% è una scelta ragionevole. Il motivo sarebbe che se aveste una dimensione totale del campione n e voleste campionare casualmente con la sostituzione (ovvero ri-campionamento, come nel bootstrap statistico) n casi dalla n iniziale , la probabilità che un singolo caso venisse selezionato nel il ricampionamento sarebbe circa 0,632, a condizione che n non sia troppo piccolo, come spiegato qui: https://stats.stackexchange.com/a/88993/16263

Per un campione di n = 250, la probabilità che un singolo caso venga selezionato per un nuovo campione a 4 cifre è 0,6329. Per un campione di n = 20000, la probabilità è 0,6321.


1

Tutto dipende dai dati a portata di mano. Se disponi di una considerevole quantità di dati, 80/20 è una buona scelta come menzionato sopra. Ma se non si esegue la convalida incrociata con una suddivisione 50/50, potrebbe essere di grande aiuto e impedire la creazione di un modello che si adatti eccessivamente ai dati di allenamento.

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.