Perché non addestrare il modello finale su tutti i dati dopo aver eseguito i dati di test della base di sintonizzazione dell'iperparametro e i dati di convalida della base di selezione del modello?


9

Per dati interi intendo train + test + validation

Una volta che ho risolto il mio iperparametro usando i dati di validazione e scelto il modello usando i dati di test, non sarebbe meglio avere un modello addestrato su tutti i dati in modo che i parametri siano meglio addestrati piuttosto che avere il modello addestrato solo su dati del treno


2
Non dovresti MAI riparare i tuoi iperparametri usando i tuoi dati di test. Hai appena rovinato l'intero esperimento rimuovendo il tuo gruppo di controllo cieco (set di test).
JahKnows

@JahKnows Dopo aver terminato l'ottimizzazione dei parametri iper per un modello, non capisco il danno, tranne per il fatto che non saprò quanto è buono su un set di dati diverso. Come ho rovinato il mio esperimento? mi sto perdendo qualcosa?
Apoorva Abhishekh,

Risposte:


8

La domanda è errata. Molte persone fanno quello che dici che "non possono" fare.

In effetti, l' implementazione della ricerca della griglia nel pacchetto sklearn ampiamente distribuito fa proprio questo. A meno refit=Falseche, riqualificherà il modello finale utilizzando tutti i dati.

Penso che per alcuni iperparametri questo potrebbe non essere molto desiderabile, perché sono relativi al volume di dati. Ad esempio, considera la min_samples_leaftattica di pre-potatura per un albero decisionale . Se disponi di più dati, la pre-potatura potrebbe non funzionare come desideri.

Ma ancora una volta, molte persone riescono a riutilizzare tutti i dati dopo la convalida incrociata, in modo da ottenere il miglior modello possibile.

Addendum: @NeilSlater dice di seguito che alcune persone eseguono partecipazioni in cima al CV. In altre parole, hanno una divisione test treno e quindi eseguono la selezione del modello sull'allenamento. Secondo lui, si allenano nuovamente utilizzando la divisione del set di allenamento originale, ma non il set di test. Il set di test viene quindi utilizzato per eseguire una stima del modello finale. Personalmente, vedo tre difetti su questo: (a) non risolve il problema che ho menzionato con alcuni iperparametri che dipendono dal volume di allenamento poiché ti stai ri-allenando comunque, (b) quando collaudi molti modelli, preferisco più sofisticati metodi come la validazione incrociata nidificata in modo che nessun dato vada sprecato, e (c) il hold-out è un metodo terribile per dedurre come un modello si generalizzerà quando si hanno pochi dati.


La funzionalità riguarda il riutilizzo della convalida incrociata, non è ancora consigliabile riutilizzare i dati del test, poiché si hanno solo ipotesi di convalida incrociata e nessuna misura delle prestazioni. Qualsiasi parametro di bug o problema (come nell'esempio che fornisci) potrebbe altrimenti rendere il modello irrimediabilmente peggiore.
Neil Slater,

@NeilSlater Non capisco cosa hai detto qui: "La funzionalità riguarda il riutilizzo della convalida incrociata"
Ricardo Cruz,

"feature" -> l' refitopzione della funzione GridSearchCV. Non si adatta per includere i dati di test (non riesce nemmeno a vederli).
Neil Slater,

@NeilSlater, puoi facilmente controllare il codice da solo se non mi credi (qui) . Se refit = True, quindi "adatta lo stimatore migliore utilizzando l'intero set di dati".
Ricardo Cruz,

1
@NeilSlater, questa non è la mia esperienza, ma ho aggiunto la tua esperienza al mio commento in modo che altri possano trarne vantaggio. Grazie.
Ricardo Cruz,

1

Si, puoi.

Poiché i dati di test dovrebbero provenire da una distribuzione simile per addestrare i dati, non si romperà il modello. Se il modello è stato addestrato correttamente, non si noterà alcun cambiamento significativo (eccetto una migliore metrica di precisione sui dati di test / validazione precedenti).

Ma è raramente vero che i dati dei test provengano esattamente dalla stessa distribuzione dei dati del treno, quindi nello scenario di un caso applicativo reale potresti ottenere una migliore generalizzabilità del tuo modello.


1
Il problema con l'inclusione dei dati del test secondo questo suggerimento è che ora non si ha la misura di quanto il modello generalizzi. Sì, potresti aspettarti che si generalizzi meglio. Tuttavia, non lo sai , perché hai rimosso la tua capacità di misurarlo. Suggerisco di aggiungere questo avvertimento e spiegare perché a volte questo è ancora ok (ad esempio quando si ricevono nuovi dati, si potrebbe essere in grado di trattarlo come un nuovo set di test e costruire una nuova misurazione nel tempo, sperando di trarre vantaggio dal modello migliore - è un rischio però)
Neil Slater

@NeilSlater: Capisco di aver rimosso la mia capacità di misurare quanto bene si generalizzerà su un set di dati diverso. Ma se ho sia test che holdout, anche dopo l'ottimizzazione dell'iperparametro, posso allenare di nuovo il mio modello su train + test, rimarrò comunque in attesa per verificare se il mio modello si generalizza. So che questo è diverso da quello che ho chiesto. Ma voglio solo conoscere il tuo punto di vista.
Apoorva Abhishekh,

1
@ApoorvaAbhishekh: se avessi ancora un altro set di dati di controllo, allora sì, puoi usarlo come nuovo set di test contro il nuovo modello addestrato su new_train = {vecchio treno, vecchio cv, vecchio test}. Quindi otterresti una misura di generalizzazione. Anche se devi stare attento a non usarlo eccessivamente - se si scopre che c'è un problema con il nuovo set combinato (ad es. L'arresto anticipato deve cambiare a causa di più dati), non puoi anche usarlo come nuovo set di cv. . . a meno che tu non abbia ancora un altro holdout impostato in riserva. . .
Neil Slater,

@NeilSlater In teoria è necessario un nuovo set di dati per conoscere le prestazioni. In pratica potresti essere sicuro che il tuo modello funzioni bene, dato che ci hai lavorato per molto tempo e sai cosa aspettarti. Ma di solito hai anche altri dati per verificare le prestazioni di un modello, ad esempio in visione artificiale - dati senza etichetta. Non è giusto, ma funziona anche. Certo, è un caso estremo, ma voglio dire che potrebbe funzionare. Io stesso ho sempre un set di test che non mischio in allenamento.
Il'ya Zhenin,

1

La risposta a questa domanda dipende dall'algoritmo di training (tecnologia) che si utilizza. Ad esempio, ho visto alcuni approcci nella classificazione degli ensemble in cui alla fine vengono combinati set di training e validazione (ma non test). È molto importante sapere che anche la convalida viene utilizzata principalmente per decidere gli iperparametri, alcuni di questi iperparametri possono essere una funzione dei dati utilizzati per l'allenamento. Ad esempio, nella convalida DNN era abituato a sapere quando fermarsi, poiché un eccesso di adattamento può verificarsi a seguito della regolazione continua dei parametri (pesi) della rete, abbiamo bisogno di un modo per sapere quando fermarsi. Senza il set di validazione camminerai ciecamente nel processo di allenamento. D'altra parte, se si utilizza esattamente lo stesso numero di iterazioni specificato in precedenza, esiste un'alta probabilità che non si otterrà da questi campioni aggiuntivi. Il set di test non deve essere toccato affatto, come indicato sopra senza il set di test non si avrà alcun metodo per valutare il modello. Questo è il gioco d'azzardo, NON PUOI fornire alcun modello o soluzione senza la stima della sua accuratezza sulla vera distribuzione dei dati (rappresentata dai dati dei test).


Intendevo dopo l'addestramento sui dati del treno, l'ottimizzazione dell'iperparametro sui dati di convalida e la scelta del modello in base ai dati del test, posso addestrare il mio modello in base ai dati completi. Oppure, posso combinare i dati di allenamento e i dati di convalida dopo aver terminato la messa a punto dell'iperparametro e stimare l'accuratezza usando i dati del test. Ci scusiamo per averlo scritto in modo errato. L'ho corretto ora.
Apoorva Abhishekh,
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.