Il team di Andrew Ng ha commesso una grande svista in un articolo di ricerca. E ciò è accaduto a causa della suddivisione casuale dei dati. Ecco esattamente cosa è successo (con soluzione):
È comune generare set di addestramento e di validazione utilizzando una suddivisione casuale. Tuttavia, in molte situazioni, può essere fatale per la costruzione del modello. Considera di costruire un modello che genera didascalie per le immagini. A causa della natura intrinseca del linguaggio, ogni immagine può avere molte didascalie diverse. - Immagine-1 → Didascalia-1, Didascalia-2, Didascalia-3, ecc. - Immagine-2 → Didascalia-1, Didascalia-2, Didascalia-3, ecc. Controlla questo 👇
Se utilizziamo la suddivisione casuale, lo stesso punto dati (immagine) sarà disponibile nei set di addestramento e di validazione. Di conseguenza, finiamo per valutare il modello sugli istanti su cui è stato addestrato. Questo è un esempio di fuga di dati (chiamata anche fuga di gruppo), che porta a overfitting!
La stessa cosa è successa nel documento di Andrew Ng, dove hanno preparato un dataset medico per rilevare la polmonite. - Immagini totali = 112k - Pazienti totali = 30k A causa della suddivisione casuale, le immagini dello stesso paziente erano disponibili sia nei set di addestramento che in quelli di validazione. Questo ha portato a una fuga di dati, e i punteggi di validazione sembravano molto migliori di quanto dovessero essere. Questo è il loro documento iniziale👇
La divisione casuale dei gruppi ha risolto questo. Ci sono due passaggi: 1) Raggruppare tutte le istanze di addestramento corrispondenti a un'immagine. 2) Dopo il raggruppamento, l'INTERO GRUPPO (tutti gli esempi di un'immagine) deve essere assegnato casualmente al set di addestramento o di validazione. Questo impedirà la fuga di gruppo.
Se utilizzi Sklearn, il GroupShuffleSplit implementa questa idea. Come esempio, considera di avere il seguente dataset: - x1 e x2 sono le caratteristiche. - y è la variabile target. - group denota i criteri di raggruppamento. Controlla questo 👇
Per prima cosa, importiamo il GroupShuffleSplit da sklearn e istanziamo l'oggetto. Successivamente, il metodo split() di questo oggetto ci consente di eseguire la suddivisione dei gruppi. Restituisce un generatore, e possiamo decomprimerlo per ottenere il seguente output: - I punti dati nei gruppi “A” e “C” sono insieme nel set di addestramento. - I punti dati nel gruppo “B” sono insieme nel set di validazione/test. Controlla questo 👇
Pochi giorni dopo, il team di Andrew Ng ha aggiornato il documento dopo aver utilizzato la stessa strategia di suddivisione del gruppo per garantire che gli stessi pazienti non finissero sia nel set di addestramento che in quello di validazione. 👉 A te la parola: Hai mai affrontato questo problema prima d'ora?
11,83K