Allenarsi con il set di dati completo dopo la convalida incrociata?


140

È sempre una buona idea allenarsi con il set di dati completo dopo la convalida incrociata ? Dirla in altro modo, è ok per allenarsi con tutti i campioni nel mio set di dati e non essere in grado di verificare se questo particolare montaggio overfits ?


Alcuni retroscena sul problema:

Supponiamo di avere una famiglia di modelli parametrizzati da . Dì anche che ho un set di punti dati e che faccio la selezione del modello con k-fold cross-validation per scegliere il modello che generalizza meglio i dati.αN

Per la selezione del modello, posso eseguire una ricerca (ad esempio una ricerca in griglia) su eseguendo, ad esempio, la convalida incrociata di k-fold per ciascun candidato. In ciascuna delle pieghe della convalida incrociata, con il modello appreso .α βα

Il punto di convalida incrociata è che per ciascuna di queste pieghe posso verificare se il modello appreso si è adattato troppo, testandolo su "dati invisibili". A seconda dei risultati, potrei scegliere il modello appreso per i parametri che hanno generalizzato meglio durante la validazione incrociata nella ricerca della griglia.βbestαbest

Ora, diciamo che dopo la selezione del modello , vorrei usare tutti gli punti nel mio set di dati e spero di imparare un modello migliore. Per questo potrei usare i parametri corrispondenti al modello che ho scelto durante la selezione del modello, e quindi dopo l'allenamento sul set di dati completo, un nuovo modello appreso . Il problema è che, se uso tutti i punti del mio set di dati per l'allenamento, non riesco a verificare se questo nuovo modello appreso sovrappone a dati non . Qual è il modo giusto di pensare a questo problema?Nαbestβfull βfull


2
Quasi un duplicato esatto: stats.stackexchange.com/questions/52274 con molte risposte meritevoli. Forse questi fili dovrebbero essere uniti, ma non sono sicuro in quale direzione. Entrambi hanno accettato risposte molto valide.
amoeba,

Risposte:


111

Il modo di pensare alla validazione incrociata è come stimare le prestazioni ottenute usando un metodo per costruire un modello, piuttosto che per stimare le prestazioni di un modello.

Se si utilizza la convalida incrociata per stimare gli iperparametri di un modello (i s) e quindi si utilizzano tali iperparametri per adattare un modello all'intero set di dati, allora va bene, a condizione che si riconosca che la stima di convalida incrociata delle prestazioni è probabile che sia (possibilmente sostanzialmente) ottimisticamente distorto. Questo perché parte del modello (gli iperparametri) sono stati selezionati per ridurre al minimo le prestazioni di convalida incrociata, quindi se la statistica di convalida incrociata ha una varianza diversa da zero (e lo farà) c'è la possibilità di sovra-adattamento il criterio di selezione del modello.α

Se si desidera scegliere gli iperparametri e stimare le prestazioni del modello risultante, è necessario eseguire una convalida incrociata nidificata, in cui la convalida incrociata esterna viene utilizzata per valutare le prestazioni del modello e in ogni piega incrociata la validazione viene utilizzata per determinare gli iperparametri separatamente in ogni piega. Si crea il modello finale utilizzando la convalida incrociata sull'intero set per scegliere gli iperparametri e quindi costruire il classificatore sull'intero set di dati utilizzando gli iperparametri ottimizzati.

Questo è ovviamente costoso dal punto di vista computazionale, ma ne vale la pena poiché la distorsione introdotta da una stima errata delle prestazioni può essere grande. Vedi il mio documento

GC Cawley e NLC Talbot, Over-fitting nella selezione dei modelli e conseguente bias nella selezione delle prestazioni, Journal of Machine Learning Research, 2010. Research, vol. 11, pp. 2079-2107, luglio 2010. ( www , pdf )

Tuttavia, è ancora possibile avere un adattamento eccessivo nella selezione del modello (la convalida incrociata nidificata consente solo di testarlo). Un metodo che ho trovato utile è quello di aggiungere un termine di regolarizzazione all'errore di convalida incrociata che penalizza i valori di iperparametro che potrebbero comportare modelli troppo complessi, vedere

GC Cawley e NLC Talbot, Prevenire un eccesso di adattamento nella selezione dei modelli tramite regolarizzazione bayesiana degli iperparametri, Journal of Machine Learning Research, volume 8, pagine 841-861, aprile 2007. ( www , pdf )

Quindi le risposte alla tua domanda sono (i) sì, dovresti usare l'intero set di dati per produrre il tuo modello finale poiché più dati usi più è probabile che si generalizzi bene ma (ii) assicurati di ottenere una stima imparziale delle prestazioni tramite convalida incrociata nidificata e potenzialmente prendere in considerazione la possibilità di penalizzare la statistica della convalida incrociata per evitare un eccesso di adattamento nella selezione del modello.


3
+1: risponde alla domanda: "Se usi la convalida incrociata per stimare gli iperparametri di un modello (gli α) e poi usi quegli iperparametri per adattare un modello all'intero set di dati, allora va bene ..."
Neil G

4
@soufanom, no, è probabile che l'uso di "esperimenti iniziali" per fare delle scelte riguardo al modello provocherà un eccesso di adattamento e quasi sicuramente introdurrà una distorsione ottimistica nell'analisi delle prestazioni. La convalida incrociata utilizzata per l'analisi delle prestazioni deve ripetere OGNI passaggio utilizzato per montare il modello in modo indipendente in ogni piega. Gli esperimenti nel mio documento mostrano che i modelli del kernel possono essere molto sensibili a questo tipo di distorsione, quindi è vitale eseguire la selezione del modello e la valutazione delle prestazioni con tutto il possibile rigore.
Dikran Marsupial,

3
Per i metodi del kernel, come SVM, è spesso possibile eseguire una validazione incrociata senza esclusione di costi quasi senza costi di calcolo (vedere gli articoli elencati nella mia risposta). Uso questa convalida incrociata "virtuale" per l'ottimizzazione degli iperparametri, nidificata nella convalida incrociata k-fold per la valutazione delle prestazioni. Il costo è quindi abbastanza ragionevole. A mio avviso, non è accettabile utilizzare alcuna procedura in cui la valutazione delle prestazioni è distorta in alcun modo dalla messa a punto degli iperparametri. Vale la spesa computazionale per ottenere una stima affidabile.
Dikran Marsupial,

2
@DikranMarsupial. Non capisco bene il terzo paragrafo nella tua risposta. Se eseguo una convalida incrociata nidificata, otterrò un diverso set di iperparametri per ogni piega del CV esterno (ovvero ottengo un set di iperparametri dall'esecuzione del CV interno su una griglia di parametri). Come faccio quindi a scegliere il miglior set di iperparametri?
Amelio Vazquez-Reina,

1
la validazione incrociata è essenzialmente un mezzo per stimare le prestazioni di un metodo di adattamento di un modello, piuttosto che del metodo stesso. Quindi, dopo aver eseguito la convalida incrociata nidificata per ottenere la stima delle prestazioni, è sufficiente ricostruire il modello finale utilizzando l'intero set di dati, utilizzando la procedura che è stata convalidata in modo incrociato (che include la selezione degli iperparametri).
Dikran Marsupial,

23

Giusto per aggiungere alla risposta di @ mark999, il caretpacchetto di Max Kuhn (addestramento di classificazione e regressione) è la fonte più completa in R per la selezione del modello basata sulla validazione incrociata bootstrap o sul CV N-fold e anche su alcuni altri schemi.

Non trascurare la grandezza del rmspacchetto, ma caretti consente di adattare praticamente ogni metodo di apprendimento disponibile in R, mentre validatefunziona solo con i rmsmetodi (penso).

Il caretpacchetto è una singola infrastruttura per preelaborare i dati, adattarsi e valutare qualsiasi modello popolare, quindi è semplice da usare per tutti i metodi e fornisce una valutazione grafica di molte misure di prestazione (qualcosa che accanto al problema di overfit potrebbe influenzare notevolmente la selezione del modello come bene) sulla tua griglia e importanza variabile.

Guarda le vignette del pacchetto per iniziare (è molto semplice da usare)
Preelaborazione dei dati
Selezione delle variabili con cursore
Costruzione di modelli con cursore
Importanza delle variabili

È inoltre possibile visualizzare il sito Web di assistenza per ulteriori informazioni sul pacchetto e esempi di implementazione specifici:
sito Web di assistenza ufficiale


Grazie. Sai se, dopo la selezione del modello (che viene fatto chiamando train), c'è un modo in cui il cursore si allena con il set di dati completo?
Amelio Vazquez-Reina,

Non sei sicuro che sia una buona idea o perché lo vorresti, ma puoi semplicemente adattare il modello finale restituito in treno al set di dati completo.
Momo,

16

Credo che Frank Harrell raccomanderebbe la validazione bootstrap piuttosto che la validazione incrociata. La convalida Bootstrap ti consentirebbe di convalidare il modello montato sul set di dati completo ed è più stabile della convalida incrociata. Puoi farlo in R usando validateil rmspacchetto di Harrell .

Vedi il libro "Regressione Modeling Strategies" di Harrell e / o "An Introduction to the Bootstrap" di Efron e Tibshirani per maggiori informazioni.


9
Omettere un prossimo mito sul "CV non valido", questo è un problema di terminologia: la "convalida incrociata" di Harrell significa CV N-fold e "convalida bootstrap" significa ricampionamento del CV. Ovviamente concordo sul fatto che questo secondo sapore sia più stabile e complessivamente più bello, ma questo è anche un tipo di validazione incrociata.

1
mark999 o @mbq, ti dispiacerebbe approfondire il modo in cui bootstrap consentirebbe di convalidare un modello inserito nel set di dati completo?
Amelio Vazquez-Reina,

1
@ user27915816 Beh, in linea di principio comunque; l'idea alla base della convalida incrociata è che si verifica se un determinato metodo di allenamento sta facendo in modo affidabile buoni modelli su un set molto simile a quello finale e, in tal caso, generalizzare questa osservazione al set completo con una silenziosa ipotesi che non accadrà nulla di strano e quel metodo CV che hai usato non è in qualche modo distorto. Ovviamente, questo è quasi sempre abbastanza buono, tuttavia non puoi mai essere sicuro che il modello basato su tutti i dati che hai non sia sovradimensionato.

14

Penso che tu abbia un sacco di domande diverse qui:

Il problema è che, se uso tutti i punti del mio set di dati per l'allenamento, non riesco a verificare se questo nuovo modello appreso si sovrappone!

Il fatto è che puoi usare (una) fase di validazione solo per una cosa: per l'ottimizzazione dei parametri, (x) o per stimare le prestazioni di generalizzazione.

Pertanto, se si esegue l'ottimizzazione dei parametri mediante convalida incrociata (o qualsiasi altro tipo di determinazione dei parametri basata sui dati), è necessario disporre di campioni di prova indipendenti da tali campioni di addestramento e ottimizzazione. Dikran lo chiama validazione incrociata nidificata, un altro nome è la doppia convalida incrociata. O, ovviamente, un set di test indipendente.

Quindi, ecco la domanda per questo post: è una buona idea allenarsi con il set di dati completo dopo la convalida incrociata di k-fold? O è meglio invece attenersi a uno dei modelli appresi in una delle divisioni di convalida incrociata per αbest?

L'uso di uno dei modelli di validazione incrociata di solito è peggiore dell'allenamento sull'intero set (almeno se le prestazioni della curva di apprendimento = f (nsamples) sono ancora in aumento. In pratica è: se non lo fosse, probabilmente avresti impostato a parte un set di test indipendente.)

Se si osserva una grande variazione tra i modelli di convalida incrociata (con gli stessi parametri), i modelli sono instabili. In tal caso, aggregare i modelli può aiutare ed effettivamente essere meglio dell'uso di un modello addestrato su tutti i dati.

Aggiornamento: questa aggregazione è l'idea alla base del bagging applicato al ricampionamento senza sostituzione (convalida incrociata) anziché al ricampionamento con sostituzione (convalida bootstrap / out-of-bootstrap).

Ecco un documento in cui abbiamo usato questa tecnica:
Beleites, C. & Salzer, R .: Valutare e migliorare la stabilità dei modelli chemiometrici in situazioni di piccole dimensioni del campione, Anal Bioanal Chem, 390, 1261-1271 (2008).
DOI: 10.1007 / s00216-007-1818-6

Forse ancora più importante, come posso allenarmi con tutti i punti nel mio set di dati e combattere ancora il overfitting?

Essendo molto conservatore con i gradi di libertà consentiti per il modello "migliore", ovvero tenendo conto dell'incertezza (casuale) sui risultati della validazione incrociata dell'ottimizzazione. Se i df sono effettivamente appropriati per i modelli di validazione incrociata, è probabile che non siano troppi per il set di addestramento più ampio . Il problema è che l'ottimizzazione dei parametri è in realtà test multipli. È necessario proteggersi da set di parametri accidentalmente belli.


...If you observe a large variation between the cross validation models (with the same parameters), then your models are unstable. In that case, aggregating the models can help...Puoi spiegarlo un po 'di più? ad es. se sto eseguendo una regressione logistica in una configurazione convalidata in 10 k e finendo con 10 serie di coefficienti, mi consigliate di aggregare le stime dei coefficienti per formare un modello finale? Se è così, come si può fare, basta prendere i mezzi?
Zhubarb,

@cbeleites puoi approfondire If the d.f. are actually appropriate for the cross validation models. A mio avviso, stai sostenendo che i set di treni / convalide non sono molto grandi rispetto al set di dati completo, ho ragione?
jpcgandre,

1
@jpcgandre: la scelta di uno dei modelli surrogati per un ulteriore utilizzo è in realtà una selezione di modelli basata sui dati, il che significa che è necessario un livello esterno indipendente di convalida. E in generale, a meno che tu non abbia abbastanza casi in modo da poter effettivamente fare confronti tra modelli statisticamente significativi sulla base di test della dimensione totale del campione, IMHO non dovresti selezionare. 1k
cbeleites,

1
Ancora più importante: i modelli surrogati iterati di validazione incrociata condividono lo stesso set di iperparametri. Cioè, sono equivalenti in tutto ciò che ritieni importante, ma la scelta arbitraria di casi di addestramento e test. Selezionare un modello "buono", quindi, in realtà dovrebbe selezionare principalmente una buona combinazione di test / training set - che è fondamentalmente ciò che di solito non vogliamo: vogliamo una scelta che si sta generalizzando bene e quindi non solo lavorando per casi favorevoli. Da questo punto di vista, selezionare un modello surrogato da una "normale" validazione incrociata non ha alcun senso per me.
cbeleites,

1
@jpcgandre: (df) sostengo che scegliendo una complessità del modello appropriata per l'addestramento su del set di dati (che sostengo sia grande quasi quanto l'intero set di dati), potresti arrivare a un orientamento verso modelli leggermente troppo restrittivi per la formazione sull'intero set di dati. Tuttavia, non credo che ciò dovrebbe avere importanza nella pratica, tanto più che la mia impressione nel mio campo è che tendiamo piuttosto a errare verso modelli troppo complessi. 11k
cbeleites,

6

Quello che fai non è una validazione incrociata, piuttosto una sorta di ottimizzazione stocastica.

L'idea del CV è quella di simulare una performance su dati invisibili eseguendo diversi round di costruzione del modello su un sottoinsieme di oggetti e test su quelli rimanenti. I risultati in qualche modo mediati di tutti i round sono l' approssimazione delle prestazioni di un modello allenato sull'intero set .

Nel tuo caso di selezione del modello, dovresti eseguire un CV completo per ogni set di parametri e quindi ottenere un'approssimazione delle prestazioni sul set completo per ogni configurazione, quindi apparentemente la cosa che volevi avere.

Tuttavia, si noti che non è affatto garantito che il modello con la migliore precisione approssimativa sarà il migliore in realtà - è possibile convalidare in modo incrociato l'intera procedura di selezione del modello per vedere che esiste un intervallo nello spazio dei parametri per il quale le differenze in la precisione del modello non è significativa.


2
Grazie @mbq, ma non sono sicuro di seguirlo. Io faccio N-fold convalida incrociata per ciascun valore del punto della mia ricerca di griglia nello spazio iperparametro. Il risultato medio delle pieghe a N mi dà l'approssimazione che menzioni, che uso per confrontare i modelli e fare la selezione del modello selezionando il modello che meglio si adatta al set di validazione. La mia domanda riguarda cosa succede quando mi alleno con il set di dati completo. Penso che il modello appreso cambi (i parametri del cambiamento del modello appreso), e in linea di principio non ho modo di sapere se soffro di overfitting. β
Amelio Vazquez-Reina,

@AmV Se è così, ok - come ho scritto, CV prova già lo scenario completo, non si può dire di più senza nuovi dati. Ancora una volta, puoi al massimo fare un CV nidificato per vedere se non ci sono overfitting imposti dalla selezione del modello stesso (se la selezione offre un ottimo miglioramento o se i dati sono rumorosi, il rischio di ciò è piuttosto grande).
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.