È sempre meglio utilizzare l'intero set di dati per addestrare il modello finale?


24

Una tecnica comune dopo l'addestramento, la convalida e il test del modello di preferenza di Machine Learning consiste nell'utilizzare il set di dati completo, incluso il sottoinsieme di test, per formare un modello finale su cui distribuirlo , ad esempio un prodotto.

La mia domanda è: è sempre il meglio per farlo? Cosa succede se le prestazioni peggiorano effettivamente?

Ad esempio, ipotizziamo un caso in cui il modello abbia un punteggio di circa il 65% nella classificazione del sottoinsieme di test. Ciò potrebbe significare che il modello non è stato addestrato in modo adeguato OPPURE che il sottoinsieme di test è costituito da valori anomali. In quest'ultimo caso, allenare il modello finale con loro ridurrebbe le sue prestazioni e lo scoprirai solo dopo averlo distribuito.

Ridefinendo la mia domanda iniziale:

Se avessi una dimostrazione di una volta di un modello , come dispiegarlo su elettronica incorporata a bordo di un costoso esperimento missilistico, ti fideresti di un modello che è stato ri-addestrato con il sottoinsieme di test nella fase finale senza essere ri testato sulle sue nuove prestazioni?

Risposte:


14

Una volta ottenuti iperparametri ottimali per il tuo modello, dopo l'addestramento e la convalida incrociata, ecc., In teoria è corretto addestrare il modello sull'intero set di dati per distribuirlo alla produzione. Questo, in teoria, si generalizzerà meglio.

TUTTAVIA, non è più possibile presentare dichiarazioni statistiche / prestazionali sui dati di test poiché non si dispone più di un set di dati di prova.

Se si distribuisce un modello in produzione utilizzando l'intero set di dati di training e si conoscono i valori effettivi della variabile target dei nuovi dati in entrata (ovvero i dati su cui il modello di produzione sta facendo previsioni), è possibile calcolare le metriche delle prestazioni in tempo reale come questi nuovi dati sono come i dati di test (non sono stati visti dal modello durante l'allenamento). Da questo processo è possibile aggiornare i modelli iperparametri per ottenere prestazioni migliori.

Ma se conoscessi i valori target di nuovi dati, perché dovresti formare un modello in primo luogo?

In generale, direi se hai abbastanza dati con una varietà sufficiente, quindi mescola e dividi i dati 80:20 formazione: il test dovrebbe essere sufficiente per formare un modello solido e non devi preoccuparti di problemi di generalizzazione (supponendo ovviamente che tu regolarizzi il modello).


+1, grazie per la risposta! sembra uno shuffle casuale del set di dati prima di suddividere in 80/20 probabilmente ci fa sentire "statisticamente" sicuri (:
pcko1

2
Le prestazioni sul set di test tenuto dovrebbero essere generalizzate a tutta la popolazione, a condizione che lo abbiate fatto correttamente. Sebbene non si disponga di un set di test dopo aver applicato il metodo all'intero set di dati, le prestazioni sul treno / set di test convalidati in modo incrociato originale sono uno stimatore imparziale delle prestazioni dell'algoritmo di allenamento. Questo è il punto centrale del CV: non addestrare o parametrizzare un modello, ma stimare le prestazioni del processo di costruzione del modello. Le prestazioni su tutti i set di test precedenti alla modellazione di dati completi sono la stima delle prestazioni sui dati completi.
Nuclear Wang,

13

Domanda interessante. Personalmente non l'ho visto per i prodotti che vanno in produzione, ma capisco la logica.

Teoricamente, più dati sono stati visti dal modello distribuito, meglio dovrebbe generalizzare. Quindi, se hai addestrato il modello sull'insieme completo di dati che hai a disposizione, dovrebbe generalizzare meglio di un modello che ha visto, ad esempio, solo insiemi di treni / val (ad esempio ~ 90%) dall'insieme di dati completo.

Il problema con questo (e la ragione per cui abbiamo diviso i dati in set treno / val / test in primo luogo!) È che vogliamo essere in grado di fare affermazioni statistiche sull'accuratezza dei dati non visti. Non appena ri-addestriamo di nuovo un modello su tutti i dati, non è più possibile presentare tali affermazioni.

[Modificare]

Ecco una domanda correlata su Cross-Validated , in cui la risposta accettata mi fa punti simili e menziona altri modi di fare le cose.


Passiamo in rassegna:

  1. addestrare un modello
  2. cambia modello
  3. vai al passaggio 1
  4. valutare le prestazioni sul set di test
  5. Modello attuale con accuratezza del test trovato nel passaggio 5

Alla fine, se riesci a ottenere un ottimo punteggio sul set di test, puoi affermare che generalizza bene. Quindi la domanda se la riqualificazione dell'intero set di dati migliorerà le prestazioni su dati futuri non visti non è strettamente qualcosa che puoi testare. L'evidenza empirica di prestazioni migliori in altri insiemi di problemi correlati sarebbe l'unica fonte o guida nel momento in cui è necessario prendere la decisione.

Un controllo di integrità sarebbe quello di testare nuovamente il modello riqualificato finale sul set di test originale; aspettandosi che ottenga un punteggio più alto di quanto abbia mai fatto quando il modello ha visto solo il set treno / val, perché ha effettivamente visto il set di test durante l'allenamento. Questo non mi farebbe sentire sicuro al 100% che questo modello finale sia superiore in tutti i casi futuri, ma almeno è buono come può essere con i dati forniti.

Forse ci sono argomenti più rigorosi contro il fare ciò che dici (probabilmente accademicamente motivato), tuttavia sembra interessante per le applicazioni pratiche!


+1, grazie per il tuo impegno e per aver sottolineato quel post, mi sono perso! Per quanto riguarda il tuo suggerimento di testare il modello sull'intero set di dati di allenamento alla fine, penso che non otterrai alcuna preziosa intuizione dal suo risultato. Semplicemente perché la formazione dell'algoritmo si basa solitamente sull'ottimizzazione delle funzioni di costo, quindi il modello addestrato è ottimale dati i dati di formazione. La bassa precisione sui dati del treno non significa che non sia ottimale, ma semplicemente non può fare di meglio dato quel set di dati e l'architettura dell'algoritmo selezionata. Da ciò non si può dedurre nulla per la sua validità esterna.
pcko1,

1
Prego! Sono totalmente d'accordo con la tua affermazione (anche se ho detto di testare il modello finale addestrato sui dati del test di origine , non di treno). In ogni caso, vorrei ancora vedere che il modello finale non ha fatto qualcosa di completamente inaspettato. Teoria e pratica non sempre si allineano :)
n1k31t4

6

Un punto che deve essere sottolineato sull'apprendimento automatico statistico è che non ci sono garanzie . Quando si stimano le prestazioni utilizzando un set distribuito, questa è solo una stima . Le stime possono essere sbagliate.

Questo richiede un po 'di tempo per abituarsi, ma è qualcosa con cui ti dovrai abituare. Quando dici "Che cosa succede se le prestazioni peggiorano effettivamente?", La risposta è certa, ciò potrebbe accadere. Le prestazioni effettive potrebbero essere peggiori di quanto stimato / previsto. Potrebbe anche essere migliore. Entrambi sono possibili. È inevitabile. C'è un'incertezza intrinseca, irriducibile.

Quando si valutano le prestazioni utilizzando un set di test esteso, si utilizzano i dati del passato per tentare di prevedere le prestazioni future. Come si suol dire, le performance passate non sono garanzia di risultati futuri . Questo è un dato di fatto che dobbiamo solo accettare.

Non puoi lasciarti immobilizzare. Il fatto che sia possibile fare peggio di quanto previsto non è un motivo per evitare di distribuire alla produzione un modello addestrato sui dati. In particolare, è anche possibile fare male se non lo fai. È possibile che un modello addestrato su tutti i dati (treno + validazione + test) sia peggiore di un modello addestrato solo sulla parte treno + validazione. È anche possibile che sia meglio. Quindi, piuttosto che cercare una garanzia, dobbiamo chiederci: cosa ci dà le migliori possibilità di successo? Qual è probabilmente il più efficace?

E in questo caso, quando si desidera distribuire alla produzione, il meglio che si può fare è utilizzare tutti i dati disponibili. In termini di prestazioni attese, l'utilizzo di tutti i dati non è peggiore rispetto all'utilizzo di alcuni dati e potenzialmente migliore. Pertanto, è possibile utilizzare tutti i dati disponibili per addestrare il modello durante la creazione del modello di produzione. Le cose possono ancora andare male - è sempre possibile essere sfortunati, ogni volta che usi metodi statistici - ma questo ti dà la migliore possibilità possibile che le cose vadano bene.

In particolare, la pratica standard è la seguente:

  1. Prenota alcuni dei tuoi dati in un set di test. Non esiste una regola rigida su quale frazione utilizzare, ma ad esempio, potresti riservare il 20% per il set di test e mantenere il restante 80% per formazione e validazione. Normalmente, tutte le divisioni dovrebbero essere casuali.

  2. Successivamente, utilizzare i dati di training e validazione per provare più architetture e iperparametri, sperimentando per trovare il modello migliore possibile. Prendi l'80% trattenuto per l'addestramento e la convalida e suddividilo in un set di addestramento e in un set di convalida e addestra un modello utilizzando il set di addestramento, quindi misura la sua precisione sul set di convalida. Se si utilizza la convalida incrociata, questa operazione verrà suddivisa più volte e in media i risultati nel set di convalida; in caso contrario, eseguirai una singola divisione (ad esempio, una divisione del 70% / 30% dell'80% o qualcosa del genere) e valuterai le prestazioni sul set di convalida. Se hai molti iperparametri da provare, fallo una volta per ciascuna impostazione candidata di iperparametro. Se hai molte architetture da provare, fallo per ogni architettura candidata. Puoi iterare su questo, usando ciò che

  3. Una volta che sei felice, congeli la scelta dell'architettura, iperparametri, ecc. Ora la tua sperimentazione è terminata. Una volta raggiunto questo punto, non puoi più provare altre opzioni (senza ottenere un nuovo set di test) - quindi non toccare questo punto fino a quando non sei sicuro di essere pronto.

  4. Quando sei pronto, allora alleni un modello sul set completo di training + validazione (quell'80%) usando l'architettura e gli iperparametri selezionati in precedenza. Quindi, misurare la sua precisione sul set di test tenuto. Questa è la tua stima / previsione per quanto accurato sarà questo approccio alla modellazione. Ottieni un solo numero qui. Quel numero è quello che è: se non sei soddisfatto, non puoi tornare ai passaggi 1 e 2 e fare più sperimentazione; sarebbe invalido.

  5. Infine, per l'uso in produzione, è possibile addestrare un modello sull'intero set di dati, training + validation + set di test e metterlo in uso in produzione. Si noti che non si misura mai l'accuratezza di questo modello di produzione, poiché non si dispone di dati rimanenti per farlo; hai già usato tutti i dati. Se si desidera una stima del rendimento che si otterrà, è possibile utilizzare l'accuratezza stimata dal passaggio 4 come previsione del rendimento della produzione, poiché è la migliore previsione disponibile delle prestazioni future. Come sempre, non ci sono garanzie - questa è solo la migliore stima possibile, date le informazioni a nostra disposizione. È certamente possibile che potrebbe fare di peggio di quanto tu abbia previsto, o meglio di quanto tu abbia previsto - è sempre vero.


Ha fatto +1 per lo sforzo, anche se non sono pienamente d'accordo :) Ad esempio, quando dici "In termini di prestazioni attese, l'utilizzo di tutti i dati non è peggiore dell'uso di alcuni dei dati, e potenzialmente migliore". Non vedo il ragionamento alla base. D'altra parte, il secondo punto che menzioni sembra molto importante, convalida incrociata! quindi essenzialmente ti alleni / convalidi con tutti i campioni, quindi probabilmente rifiuti gli outlier nel modello finale scelto. Grazie per la tua risposta.
pcko1,

@ pcko1, Il principio è semplice. Se disponi di dati, dovresti utilizzarli tutti o parte di essi? Perché? Forse quando otteniamo dati, prima di fare qualsiasi cosa, dovremmo semplicemente prenderne il 10% e buttarli via senza mai guardarli. In effetti, se buttarne fuori qualcosa è buono, buttarne di più è ancora meglio, quindi forse dovremmo buttare via tutti i nostri dati. È assurdo, vero? Perché? Vedi se riesci a capire perché, quindi prova ad applicarlo a questa situazione. Spero che questo ti faccia pensare!
DW,

3

Uno dei motivi per avere un set di dati è quello di evitare un eccesso di adattamento. Se si utilizza la convalida incrociata, essenzialmente si consente all'intero set di dati di fungere da set di addestramento, ma la riqualificazione non consente di convalidare se vi sono segni di eccesso di adattamento. Immagino che in entrambi i casi (convalida incrociata o riqualificazione con l'intero set di dati) non si debba cambiare radicalmente il risultato (dalla mia ipotesi non istruita), ma non sarà possibile eseguire l'ottimizzazione dell'iperparametro o convalidare le prestazioni del proprio modello in quanto non si avere un set di test. Se finisce per essere migliore, è difficile da dire, ma immagino che l'unico modo per sapere sia fare un A / B dei due modelli su dati reali nel tempo.

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.