Convalida incrociata e ottimizzazione dei parametri


14

Ho una domanda sull'ottimizzazione dei parametri quando utilizzo la convalida incrociata 10 volte.

Voglio chiedere se i parametri devono essere corretti o meno durante l'allenamento del modello di ogni piega, ovvero (1) selezionare un set di parametri ottimizzati per la precisione media di ogni piega.

o

(2) Dovrei trovare il parametro ottimizzato per ogni piega e quindi ogni piega utilizza diversi parametri ottimizzati per addestrare il suo modello, quindi testare i dati di test della piega rispettivamente e infine calcolare la precisione di ogni piega come risultato?

Qual è il metodo corretto per la convalida incrociata? Molte grazie.


Questa domanda: stats.stackexchange.com/questions/1826/… ha due grandi risposte (punteggio più alto), penso che potrebbero aiutarti nella tua domanda. Il secondo è esattamente quello che vuoi. OBS .: Vorrei scriverlo come commento, ma non posso farlo, quindi ho risposto.
Augusto,

Risposte:


11

Distinguiamo innanzitutto tra due serie di parametri: parametri del modello (ad es. Pesi per le funzioni in regressione) e parametri dell'algoritmo di apprendimento (e iperparametri). Lo scopo della convalida incrociata è identificare i parametri di apprendimento che si generalizzano bene tra i campioni di popolazione da cui apprendiamo in ogni piega.

Più specificamente: cerchiamo globalmente nello spazio i parametri di apprendimento, ma all'interno di ogni piega fissiamo i parametri di apprendimento e apprendiamo i parametri del modello. Il risultato dovrebbe essere l'apprendimento di parametri che producono in media le migliori prestazioni in tutte le pieghe. Possiamo quindi usarli per addestrare un modello sull'intero set di dati.


Spiacenti, il tipo di parametro che ho messo in discussione è l'iperparametro come hai detto.
Kevin,

Come i parametri c e g in libSVM. Quindi, dovrei usare lo stesso c e g per addestrare il modello di ogni piega del metodo (2) che ho menzionato sopra, quindi scegliere quello migliore? Grazie mille.
Kevin,

2
I (1) e (2) sopra non erano chiari per me, quindi non mi sono riferito esplicitamente a loro. Dovresti cercare lo spazio di c & g che massimizza la metrica del tuo compito quando viene mediata tra le pieghe. Quindi imposti c & g su un valore, esegui la procedura di allenamento e test su tutte le pieghe, fai una media, mantieni quel punteggio, modifica c o g e ripeti. Alla fine, trovi i migliori c & g e puoi addestrare il modello finale su tutti i tuoi dati.
Gioele

Grazie mille. Cerco di riassumere le risposte. I dati sono stati divisi in 10 volte: fold-1: (train1, test1) ... fold-10: (train10, test10) Quindi usa a (c1, g1) per allenare e testare da fold-1 a fold-10, Accuratezza media di tutte le pieghe. Prova un altro (c2, g2) per fare lo stesso processo ... ripeti fino a trovare il migliore (c, g). E la migliore precisione media (c, g) sarà il risultato della mia convalida incrociata di 10 volte.
Kevin,

1
Sembra corretto ...
Gioele

16

Penso che la risposta attualmente accettata sia incompleta in modo sfortunato. Non sono d'accordo con la frase

Lo scopo della convalida incrociata è identificare i parametri di apprendimento che si generalizzano bene tra i campioni di popolazione da cui apprendiamo in ogni piega.

Questa è davvero un'applicazione molto importante della validazione incrociata, ma non l'unica. Di solito, vuoi fare due cose:

  1. Costruisci il modello migliore che puoi
  2. Ottieni un'impressione accurata di come si comporta bene

Ora, per completare l'obiettivo 1 a seconda dell'algoritmo, potrebbe essere necessario ottimizzare alcuni iperparametri e ciò viene effettivamente spesso eseguito mediante convalida incrociata. Ma questo non ti aiuta ancora con l'obiettivo 2. Per questo devi sostanzialmente nidificare la validazione incrociata, in questo modo:

  • Separare interi dati in n pieghe
  • Per ognuno, piega nuovamente i dati di allenamento in sottocartelle
  • Usa la validazione incrociata sulle sottocartelle per imparare buoni iperparametri
  • Con questi iperparametri costruisci un modello sui dati di allenamento di quella piega
  • Testare il modello sui dati di test
  • Ripetere alla piega successiva

Per costruire un buon modello è sufficiente la validazione incrociata interna. Dovrai comunque farlo per ottenere un buon modello. Ma per ottenere una buona stima delle prestazioni del modello è necessario eseguire l'intero processo di creazione del modello all'interno di uno schema di convalida incrociata. Ciò include anche passaggi come imputazione, ecc.


1
Erik, potresti fornire un riferimento su come eseguire questa procedura?
Chao,

Ciao @Erik, quindi l'ordine generale delle analisi sarebbe (1) Trova parametri di ottimizzazione ottimali con convalida incrociata, (2) Retrain model (con i parametri di tuning acquisiti) sull'intero set di dati di training per ottenere i parametri del modello e (3 ) Vedi la stima complessiva delle prestazioni di questo metodo usando la validazione incrociata nidificata? Ciò di cui sono confuso è che nel processo di Nester CV possono essere scelti diversi iperparametri, quindi il CV nidificato non studierebbe specificamente le prestazioni complessive dei parametri iperparametro / modello che abbiamo acquisito sopra?
Michelle,

1
Sono un po 'in ritardo nella conversazione, ma vorrei sottolineare che questo metodo è anche chiamato "nidificato" o "doppia convalida incrociata" ed ecco una bella spiegazione di Tom Fearn e un esempio con codice nello scikit- impara la documentazione
MD004,
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.