Convalida incrociata nidificata per la selezione del modello


91

Come si può usare la validazione incrociata nidificata per la selezione del modello ?

Da quello che ho letto online, il CV nidificato funziona come segue:

  • Esiste il loop CV interno, in cui è possibile condurre una ricerca in griglia (ad es. Eseguendo K-fold per ogni modello disponibile, ad es. Combinazione di iperparametri / caratteristiche)
  • C'è il loop CV esterno, in cui misuriamo le prestazioni del modello che ha vinto nella piega interna, su una piega esterna separata.

Al termine di questo processo si finisce con modelli ( è il numero di pieghe nel ciclo esterno). Questi modelli sono quelli che hanno vinto nella ricerca della griglia all'interno del CV interno e sono probabilmente diversi (ad es. SVM con kernel diversi, addestrati con caratteristiche possibilmente diverse, a seconda della ricerca della griglia).KK

Come faccio a scegliere un modello da questo output? Mi sembra che la selezione del modello migliore da quei modelli vincenti non sarebbe un confronto equo poiché ogni modello è stato addestrato e testato su diverse parti del set di dati.K

Quindi, come posso usare CV nidificato per la selezione del modello?

Inoltre ho letto i thread che discutono di come la selezione del modello nidificato sia utile per analizzare la procedura di apprendimento. Quali tipi di analisi / controlli posso fare con i punteggi che ottengo dalle pieghe K esterne?

Risposte:


76

Come faccio a scegliere un modello da questo output [validazione incrociata esterna]?

Risposta breve: non lo fai.

Trattare la validazione incrociata interna come parte della procedura di adattamento del modello. Ciò significa che il raccordo, incluso il montaggio degli iperparametri (è qui che si nasconde la convalida incrociata interna) è proprio come qualsiasi altra routine di esitazione del modello.
La convalida incrociata esterna stima le prestazioni di questo approccio di adattamento del modello. Per questo usi i soliti presupposti

  • i modelli surrogati esterni sono equivalenti al modello "reale" creato con tutti i dati.kmodel.fitting.procedure
  • Oppure, nel caso 1. si guasta (distorsione pessimistica della validazione del ricampionamento), almeno i modelli surrogati esterni sono equivalenti tra loro. Ciò consente di raggruppare (media) i risultati del test. Significa anche che non è necessario scegliere tra loro poiché si presume che siano sostanzialmente gli stessi. La scomposizione di questa seconda ipotesi più debole è l'instabilità del modello.k

Evitare Non scegliere il apparentemente migliore dei modelli surrogati - che di solito essere solo "la raccolta" incertezza test e conduce ad un pregiudizio ottimista.k

Quindi, come posso usare CV nidificato per la selezione del modello?

Il CV interno fa la selezione.

Mi sembra che la selezione del modello migliore da quei modelli vincenti K non sarebbe un confronto equo poiché ogni modello è stato addestrato e testato su diverse parti del set di dati.

Hai ragione nel dire che non è una buona idea scegliere uno dei modelli surrogati di . Ma ti sbagli sul motivo. Vero motivo: vedi sopra. Il fatto che non siano addestrati e testati sugli stessi dati non "fa male" qui.k

  • Non avere gli stessi dati di test: come si desidera affermare in seguito che i risultati del test si generalizzano a dati mai visti, questo non può fare la differenza.
  • Non avendo gli stessi dati di allenamento:
    • se i modelli sono stabili, questo non fa differenza: Stabile qui significa che il modello non cambia (molto) se i dati di allenamento sono "perturbati" sostituendo alcuni casi con altri casi.
    • se i modelli non sono stabili, tre considerazioni sono importanti:
      1. puoi effettivamente misurare se e in che misura questo è il caso, usando la validazione incrociata ripetuta ripetuta / ripetuta . Ciò consente di confrontare i risultati della convalida incrociata per lo stesso caso previsti da modelli diversi basati su dati di allenamento leggermente diversi.k
      2. Se i modelli non sono stabili, la varianza osservata sui risultati del test della validazione incrociata -fold aumenta: non si ha solo la varianza a causa del fatto che viene testato solo un numero finito di casi, ma si ha una varianza aggiuntiva a causa dell'instabilità dei modelli (varianza nelle capacità predittive).k
      3. Se l'instabilità è un vero problema, non è possibile estrapolare bene le prestazioni per il modello "reale".

Il che mi porta alla tua ultima domanda:

Quali tipi di analisi / controlli posso fare con i punteggi che ottengo dalle pieghe K esterne?

  • verificare la stabilità delle previsioni (utilizzare la convalida incrociata ripetuta / ripetuta)
  • verificare la stabilità / variazione degli iperparametri ottimizzati.
    Per prima cosa, gli iperparametri a dispersione selvaggia possono indicare che l'ottimizzazione interna non ha funzionato. Inoltre, ciò può consentire di decidere sugli iperparametri senza il costoso passaggio di ottimizzazione in situazioni simili in futuro. Con costosi non mi riferisco alle risorse computazionali ma al fatto che queste informazioni "costano" che potrebbero essere meglio utilizzate per stimare i parametri "normali" del modello.

  • controlla la differenza tra la stima interna ed esterna del modello scelto. Se c'è una grande differenza (l'essere interno è molto iperottimistico), c'è il rischio che l'ottimizzazione interna non abbia funzionato bene a causa di un eccesso di adattamento.


domanda di update @ user99889: cosa fare se il CV esterno rileva instabilità?

Innanzitutto, rilevare nel loop CV esterno che i modelli non producono previsioni stabili a tale riguardo non differisce in realtà dal rilevare che l'errore di prediciton è troppo elevato per l'applicazione. È uno dei possibili risultati della validazione (o verifica) del modello, il che implica che il modello che abbiamo non è adatto al suo scopo.

Nel commento di risposta a @davips, stavo pensando di affrontare l'instabilità del CV interno , ovvero come parte del processo di ottimizzazione del modello.

Ma hai certamente ragione: se cambiamo il nostro modello sulla base dei risultati del CV esterno, è necessario un altro giro di test indipendenti del modello modificato.
Tuttavia, l'instabilità nel CV esterno sarebbe anche un segno del fatto che l'ottimizzazione non è stata impostata correttamente - quindi trovare l'instabilità nel CV esterno implica che il CV interno non penalizzi l'instabilità nel modo necessario - questo sarebbe il mio punto principale di critica in una situazione del genere. In altre parole, perché l'ottimizzazione consente / porta a modelli fortemente overfit?

Tuttavia, c'è una particolarità qui che IMHO può giustificare l'ulteriore cambiamento del modello "finale" dopo un'attenta considerazione delle circostanze esatte : poiché abbiamo rilevato un eccesso di adattamento, qualsiasi modifica proposta (meno df / più restrittiva o aggregazione) al modello sarebbe essere in direzione di un minor adattamento (o almeno iperparametri che sono meno inclini a un adattamento eccessivo). Il punto di test indipendenti è di rilevare il sovradimensionamento: il sottotitolo può essere rilevato dai dati già utilizzati nel processo di formazione.

Quindi, se stiamo parlando, diciamo, di ridurre ulteriormente il numero di variabili latenti in un modello PLS che sarebbe relativamente benigno (se la modifica proposta fosse un tipo completamente diverso di modello, diciamo PLS invece di SVM, tutte le scommesse sarebbero disattivate ), e sarei ancora più rilassato a riguardo se sapessi che siamo comunque in una fase intermedia della modellazione - dopo tutto, se i modelli ottimizzati sono ancora instabili, non c'è dubbio che siano necessari più casi. Inoltre, in molte situazioni, dovrai eventualmente eseguire studi progettati per testare correttamente vari aspetti delle prestazioni (ad es. Generalizzazione dei dati acquisiti in futuro). Tuttavia, insisterei sul fatto che l'intero processo di modellizzazione dovrebbe essere segnalato e che le implicazioni di questi ultimi cambiamenti dovrebbero essere discusse attentamente.

Inoltre, l'aggregazione includendo e la stima CV analogica out-of-bag delle prestazioni sarebbe possibile dai risultati già disponibili - che è l'altro tipo di "post-elaborazione" del modello che sarei disposto a considerare benigno qui. Ancora una volta, sarebbe stato meglio se lo studio fosse stato progettato dall'inizio per verificare che l'aggregazione non fornisse alcun vantaggio rispetto alle predizioni individuali (che è un altro modo di dire che i singoli modelli sono stabili).


Aggiornamento (2019): più penso a queste situazioni, più vengo a favorire l' approccio "validazione incrociata nidificata apparentemente senza nidificazione" .


La selezione del modello scritto, se il classificatore è instabile, dovremmo scegliere quello con la prestazione mediana tra i migliori? Questa scelta sarebbe analoga al tuo suggerimento di confrontare le prestazioni interne con quelle esterne.
viyps

2
@davips: se i modelli sono instabili, l'ottimizzazione non funzionerà (l'instabilità causa una varianza aggiuntiva). Tuttavia, la scelta del modello con prestazioni mediane (o medie) non sarà di aiuto. Invece, se i modelli sono instabili, consiglierei di optare per modelli più restrittivi (ad es. Regolarizzazione più forte) o per costruire un insieme di modelli (che è fondamentalmente diverso dalla selezione di un modello).
cbeleites,

1
@ user99889: vedere la risposta aggiornata.
cbeleites,

1
@ user99889: sì - ma non aspettarti miracoli lì. Se la stabilità è un problema durante l'allenamento con l'80% dei casi (k = 5), probabilmente sarà un problema con k = 10, ovvero il 90% di n = 12,5% aggiuntivo rispetto ai modelli surrogati dell'80% / k = 5.
cbeleites,

1
@cbeleites: un ipotetico correlato. Supponiamo che decida di cercare uno spazio parametri c: [1,2,3]. Eseguo CV nidificato sull'intero set di dati e trovo le prestazioni non così eccezionali. Pertanto, espando il mio spazio di ricerca in c: [0,5,1,1,5,2,2,5,3,3,5,4]. Ho fatto qualcosa di molto brutto? Sembra che ho sostanzialmente modificato il mio spazio dei parametri (che fa parte del processo di modellazione) in base alle conoscenze acquisite dai dati di test e quindi devo valutare su un set di dati esterno al mio set di dati corrente? Felice di farne una domanda separata se pensi che sia la cosa migliore.
user0

27

Oltre alla risposta eccellente di cebeleites (+1), l'idea di base è che la convalida incrociata viene utilizzata per valutare le prestazioni di un metodo di adattamento di un modello, non del modello stesso. Se è necessario eseguire la selezione del modello, è necessario eseguire tale operazione in modo indipendente in ciascuna piega della procedura di convalida incrociata, poiché è parte integrante della procedura di adattamento del modello. Se si utilizza una procedura di selezione del modello basata sulla convalida incrociata, ciò significa che si finisce con la convalida incrociata nidificata. È utile considerare lo scopo di ogni convalida incrociata: uno è per la selezione del modello, l'altro per la stima delle prestazioni.

Realizzerei il mio modello finale adattando il modello (inclusa la selezione del modello) all'intero set di dati, dopo aver utilizzato la convalida incrociata nidificata per avere un'idea delle prestazioni che potevo ragionevolmente aspettarmi di ottenere da quel modello.


1
Perché ne hai bisogno get an idea of the performance?
viyps

1
@davips Generalmente se un metodo statistico verrà utilizzato per uno scopo pratico, gli utenti vorranno spesso avere un'idea di come funziona (ad esempio test di screening medico). Inoltre, se stai sviluppando un algoritmo di apprendimento automatico, è utile avere una stima imparziale di come si comporta rispetto ai metodi concorrenti. È anche un mezzo utile per convalidare se il metodo funziona effettivamente (che è invalidato se la convalida incrociata viene utilizzata sia per selezionare i parametri sia per stimare le prestazioni).
Dikran Marsupial

5
Quindi, per decidere effettivamente quale parametro utilizzare nel modello finale, eseguiresti il ​​ciclo interno una volta? Quindi se il ciclo interno avesse una validazione di 10 volte, porteresti 1/10 del treno di dati ogni modello lo ripeterà 10 volte e poi sceglieresti il ​​valore del parametro con l'errore medio più piccolo? Quindi riqualificare il modello con quel valore di parametro sull'intero set di dati?
emschorsch,

2
Si, è corretto. r
Dikran Marsupial,

1
@FedericoTedeschi Le convalide incrociate devono essere nidificate, piuttosto che semplicemente una suddivisione diversa per ottenere uno stimatore imparziale delle prestazioni (vedere la sezione 5.3 del mio documento jmlr.csail.mit.edu/papers/volume11/cawley10a/cawley10a.pdf ) . In genere utilizzo LOOCV solo per la selezione del modello per i modelli in cui può essere calcolato in modo efficiente e utilizzerei il bootstrap / il bagging per modelli piccoli set di dati (con l'errore OOB che sostituisce la convalida incrociata esterna).
Dikran Marsupial,

7

Non credo che nessuno abbia veramente risposto alla prima domanda. Con "validazione incrociata nidificata" penso che intendesse combinarlo con GridSearch. Di solito GridSearch ha CV integrato e accetta un parametro su quante pieghe vogliamo testare. Combinando questi due credo sia una buona pratica, ma il modello di GridSearch e CrossValidation non è il tuo modello finale. Dovresti scegliere i parametri migliori e addestrare un nuovo modello con tutti i tuoi dati alla fine, o anche fare una CrossValidation anche qui su dati invisibili e quindi se il modello è davvero così buono, ti alleni su tutti i tuoi dati. Questo è il tuo modello finale.


3
per chiarire, in python scikit-learn, in GridSearchCV(refit=True)realtà refit un modello sui dati FULL usando i parametri migliori, quindi non è necessario un passaggio aggiuntivo. Vedi documenti
Paul,

Hai ragione sull'opzione refit. Stavo solo affermando che è ovvio !!
anselal

"il modello di GridSearch non è il tuo modello finale". Ma il mio punto è che il modello di ricerca della griglia con refit = True è il modello finale. Vuoi dire che io e te siamo sulla stessa pagina? Ma poi non vedo ancora dove avviene l'annidamento nella ricerca della griglia con CV. Mi sembra un singolo strato di CV (ad esempio, CV 5 volte nella ricerca della griglia è un singolo strato di CV).
Paolo,

Siamo sulla stessa pagina per il refit. Ma con CV nidificato intendiamo che crei un altro loop CV al di fuori di GridSearch, lasciando alcuni dati fuori dall'addestramento e testando il tuo modello finale-finale per vedere se generalizza (fa buone previsioni su dati sconosciuti)
Anselal
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.