Qual è il modo più appropriato per creare un set di controllo: rimuovere alcuni soggetti o rimuovere alcune osservazioni da ciascun soggetto?


11

Ho un set di dati con 26 funzionalità e 31000 righe. È il set di dati di 38 soggetti. È per un sistema biometrico. Quindi voglio essere in grado di identificare i soggetti.

Per avere un set di test, so che devo rimuovere alcuni valori.

Allora, cosa è meglio fare e perché?

  1. (a) mantenere 30 soggetti come set di addestramento e rimuovere 8 soggetti come set di test

  2. (b) mantenere i 38 soggetti, ma rimuovere alcune righe di ciascuno. Quindi alla fine finirò con un set di formazione: 24800 file di 38 soggetti E un set di test: 6200 file di 38 soggetti


1
Se si desidera identificare i soggetti, come è possibile rimuovere i soggetti "interi" per un set di test? Il modello formato su 30 soggetti sarà in grado di identificare solo questi 30 soggetti, non gli 8 soggetti che non ha mai visto. Il tuo chiarimento sul "sistema biometrico" potrebbe rendere non applicabile la maggior parte delle risposte esistenti.
ameba dice di reintegrare Monica il

1
Sarebbe utile chiarire: (1) l' obiettivo preciso , qual è la variabile di risultato che stai cercando di prevedere (2) quali dati hai e possibilmente (3) quale approccio usi.
Matthew Gunn,

Dopo aver addestrato il sistema, come verrà distribuito? L'obiettivo è usarlo su persone che non fanno parte del set di allenamento? I nuovi dati provengono dagli stessi 38 soggetti? Sto cercando di capire come dovrebbe essere usato il sistema e se sei nel caso (1) o nel caso (2) della risposta di @ AmiTavory.
Matthew Gunn,

@amoeba Non ho molta esperienza :( Ho posto la domanda perché si consiglia di dividere i dati (formazione, convalida e test). Quindi è sia per rimuovere alcuni argomenti o alcune osservazioni di ciascuno o utilizzare un set di dati disponibile online. 1) Voglio essere in grado di identificare i soggetti. A chi appartengono le funzionalità. 2) Sto usando l'EEG (quindi serie storiche). 3) Sto usando Stratified-fold. Ma è perché ho avuto una maggiore precisione con esso rispetto a kfold. Conoscevo solo k-fold, stratificato e tralasciato. Come ho sempre pensato, doveva compensare lo squilibrio nei dati. Ma sono aperto a suggerimenti.
Aizzaac,

@MatthewGunn Penso che non sarebbe possibile usarlo con persone che non sono nel set di dati. Sarebbe molto difficile ma molto interessante se raggiunto. Quindi direi il caso 1.
Aizzaac,

Risposte:


9

Penso che la risposta di Matthew Gunn sia corretta, ma mi sembra che un CV "da record" possa comprendere due concetti diversi:

  1. I record vengono suddivisi casualmente in pieghe, indipendentemente dal soggetto o dal tempo.

  2. I record vengono suddivisi in pieghe basate sul tempo, senza piegatura utilizzata per l'allenamento che contiene dati da dopo l'inizio della piega di prova.

Nel primo caso, qualsiasi tipo di serie temporale dei tuoi dati viene compromesso, poiché il tuo set di formazione può includere dati sia prima che dopo il set di test. Il principio di Train / Test è che i dati di training rappresentano dati noti al presente, e i dati di test rappresentano dati non ancora visti (forse letteralmente dal futuro).

Forse l'autocorrelazione delle serie storiche compromette l'opzione n. 2. Forse l'elemento temporale del modello non è veramente importante e quindi le osservazioni "passate" e "future" sono probabilmente le stesse. In questi casi, né # 1 né # 2 sono la strada da percorrere.

Se c'è solo stagionalità e non tendenze, sembra giusto includere "il futuro" nell'allenamento per alcune materie al fine di prevedere nuovi soggetti (che saranno interessati dalla stessa stagionalità). Se ci sono tendenze, la formazione sul futuro dovrebbe imparare qualcosa sul futuro che non si saprebbe davvero quando si utilizza il modello in produzione.

Nell'esempio del PO, sembra che il soggetto sia saggio. Ma se le tendenze e le preoccupazioni relative alle serie temporali facessero parte del modello, proverei a utilizzare il partizionamento soggetto e basato sul tempo in modo da allenarti su un insieme di argomenti prima di un determinato momento, quindi testare gli altri argomenti dopo quel momento specifico.


1
+1 Questo è un punto molto importante che se c'è una struttura di serie temporali, non dovresti usare il futuro per predire il passato! Questo è un errore comune e pericoloso nella finanza, che utilizza informazioni non disponibili al momento (perché non è noto fino al futuro) per prevedere resi, valori predefiniti, ecc ... al momento . Con progetti complicati e tonnellate di dati, può essere molto facile commettere errori e lasciare che l'algoritmo di allenamento raggiunga efficacemente il picco nel futuro, ottenendo risultati impossibili nella realtà. ttt
Matthew Gunn,

1
Direi che l'applicazione decide quale sia la divisione appropriata. Ad esempio, anche con le serie temporali, potrebbe essere il compito di prevedere la variabile dipendente per successive misurazioni di soggetti sconosciuti, il che significherebbe che la divisione deve essere effettuata in termini di soggetto e di tempo.
cbeleites insoddisfatto di SX il

3
@cbeleites: concordato. Questo è quello che ho fatto in un recente progetto: dividere i dati in treno e testare soggetti, e usare solo dati pre-data per la formazione e dati post-data per i test, quindi stavamo testando su argomenti che non avremmo mai visto, durante un periodo di tempo che non avevamo ancora visto. Vuoi impilare il mazzo contro di te - senza esagerare - se vuoi davvero sapere quanto bene farà il tuo modello in pratica.
Wayne,

16

Una distinzione fondamentale è se si desidera:

  1. [Caso più comune]: costruisci una stima delle prestazioni su nuovi soggetti (tratto dalla stessa popolazione dei tuoi dati).
  2. Costruisci una stima delle prestazioni su nuove osservazioni degli stessi argomenti del tuo campione.

Il caso molto più comune è il numero del caso (1). Ad esempio, quanto prevedi gli attacchi di cuore per qualcuno che sta arrivando al pronto soccorso? E se sei nel caso (1), quasi certamente dovresti fare (a) la validazione incrociata per soggetto piuttosto che (b) la validazione incrociata per record. Fare una validazione da record nel caso (1) probabilmente porterà a stime incredibilmente alte e fasulle delle prestazioni su nuovi argomenti.

Non capisco esattamente cosa stai cercando di fare (e forse è uno studio autonomo, quindi la domanda non è del tutto realistica). Non so in quale caso ti trovi. Se sei nel caso molto meno comune (2), la validazione da record potrebbe essere ok.

Un tema generale in statistica è riflettere attentamente su ciò che è indipendente e ciò che è correlato. In generale, un'osservazione indipendente tende ad essere un argomento diverso. Se si desidera prevedere le prestazioni su nuovi argomenti, è necessario testare su argomenti su cui non si è allenato!

Perché la convalida incrociata per soggetto anziché per record?

Nelle impostazioni tipiche, le osservazioni ripetute dello stesso individuo sono correlate tra loro anche dopo aver condizionato le caratteristiche. Quindi, con una validazione incrociata da record, il tuo set di test non è indipendente dal tuo set di allenamento! Nel caso estremo della perfetta correlazione, avresti le stesse identiche osservazioni nel set di allenamento e nel set di test! Ti allenerai sul set di test! Le prestazioni misurate nella convalida incrociata non sarebbero predittive delle prestazioni su nuovi soggetti.

Ad esempio, questo recente documento chiama la convalida incrociata record-saggia, `` Voodoo Machine Learning ''.

Cosa fare con così pochi argomenti ...

Forse alcuni commentatori più esperti di convalida incrociata di me potrebbero entrare, ma per me questo sembra un possibile candidato per (ovvero tralasciare una convalida incrociata)?k=n

Per massimizzare i dati per la formazione, qualcosa che potresti fare è lasciare fuori un argomento per la convalida incrociata. Ogni iterazione, prova su un argomento diverso e allenati su tutti gli altri.

Se i soggetti sono tutti molto diversi, è possibile che tu abbia effettivamente vicino a e potresti voler inserire altrettanti soggetti indipendenti nel set di addestramento.n=38


So che il set di dati deve essere diviso in 3: formazione, validazione e test. Nella validazione incrociata vengono utilizzati "addestramento e validazione". Il set di controllo è il "test". Quindi stai suggerendo: per la formazione e la validazione usa 37 soggetti e prova in 1 materia? E che posso fare qualsiasi tipo di validazione incrociata: k-fold, stratificato, ecc.?
Aizzaac,

1
OP ha fatto una modifica dicendo che "è per un sistema biometrico. Quindi voglio essere in grado di identificare i soggetti". Se capisco correttamente cosa significhi, significa che ha senso solo un curriculum discografico perché l'obiettivo è prevedere l'ID soggetto in base a un campione.
ameba dice di reintegrare Monica il

@amoeba Solo se nuovi dati verranno dagli stessi 38 soggetti. Per esempio. se si suppone che il sistema indichi se le impronte digitali corrispondono o non corrispondono e verrà schierato alla porta di casa mia (cioè deve identificare gli estranei come estranei), l'addestramento e i test sugli stessi argomenti sarebbero problematici ( piace sapere con che frequenza concede l'accesso a persone che non ha mai visto prima, mai addestrato). Sono d'accordo però che "È per un sistema biometrico" solleva domande ...
Matthew Gunn,

3

Dipende molto da come immagini l'impostazione che desideri emulare con la divisione treno / prova. Per rendere le cose concrete, dire che ogni riga descrive la qualità del sonno di un soggetto in una sola notte.

  1. È possibile che, in futuro, ogni soggetto venga prima in un laboratorio del sonno e ti fornisca la qualità del sonno per alcune notti. Successivamente, dovrai prevedere la qualità del sonno delle notti future per questi soggetti . In questo caso, useresti l'opzione b). In sklearn, potresti usaresklearn.model_selection.StratifiedShuffleSplit

  2. È possibile che, in futuro, alcuni soggetti vengano prima in un laboratorio del sonno e ti forniscano la qualità del sonno per alcune notti. Successivamente, dovrai prevedere la qualità del sonno delle notti future per altre materie . In questo caso, useresti l'opzione a). In sklearn, potresti usaresklearn.cross_validation.LeavePLabelOut


1
Realisticamente, però, la domanda è quasi sicuramente il tuo caso (2) e l'opzione (a), vale a dire la convalida incrociata per soggetto, è ciò che è appropriato.
Matthew Gunn,

1
@MatthewGunn Hai ragione. Il caso 2 è molto più comune. Devo dire che mi sono imbattuto in casi di vita reale in cui 1 era la scelta giusta.
Ami Tavory,

1
Interessante. Ho potuto vedere (1) avere ragione per prevedere nuove osservazioni per una base di clienti ampia e consolidata. Punto preso. Forse sto reagendo così fortemente perché di recente ho letto questo articolo su un uso improprio diffuso di convalida incrociata a livello record nell'area medica.
Matthew Gunn,

Cosa ne pensi di questo: io uso i 38 soggetti con qualsiasi tipo di validazione incrociata; e per verificare se il mio modello può essere utilizzato con soggetti diversi; Uso un set di dati online? Penso che l'idea di un set tenuto sia quella di avere un "nuovo" set di dati per testare il modello.
Aizzaac,

3

Per entrare, presumo che l'applicazione sia per prevedere soggetti sconosciuti. Ciò significa (indipendentemente dal fatto che si disponga di serie temporali o misurazioni ripetute intrinsecamente non ordinate) che la divisione deve essere eseguita in modo da testare soggetti sconosciuti => divisione a)

Considerando che hai solo 38 argomenti, dovresti pensare a ricampionare la validazione, comunque. Dalla mia esperienza di lavoro con campioni di dimensioni analogamente ridotte (anche se più funzioni), ecco alcuni consigli in breve:

  • Scegli il soggetto fuori dal bootstrap o la convalida incrociata iterata. Consentono di valutare la stabilità dei vostri modelli che è cruciale nei problemi di piccole dimensioni del campione. I risultati possono anche essere utilizzati per un modello aggregato nel caso in cui l'instabilità sia un problema.

  • Do Non fare leave-one-soggetto-out. Non consente né di misurare la stabilità del modello, né di ridurla. Inoltre, ci sono situazioni in cui è soggetto a una grande distorsione pessimistica a causa delle piccole dimensioni del campione (al contrario della distorsione pessimistica minima che ci si aspetta).

  • Se stai usando le classiche figure di merito come accuratezza, sensibilità, specificità, ecc. E il compito è classificare correttamente i soggetti: fai attenzione che il problema cruciale è misurare le prestazioni perché l'incertezza dei risultati del test dipende dal numero assoluto di casi di test. Ad esempio, l'osservazione di 17 previsioni corrette su 17 soggetti veramente positivi corrisponde a un intervallo di confidenza del 95% per una sensibilità che va dall'80% circa al 100%.
    In altre parole, non sarai in grado di eseguire l'ottimizzazione del modello basata sui dati basata su quello.

  • Ciò significa anche che non è necessario impostare una suddivisione in tre serie (convalida incrociata nidificata), poiché in questo caso si sprecherebbero risorse in confronti statisticamente privi di significato: l'ottimizzazione è quasi garantita con esito negativo (sebbene non si noti che se si non verificare la stabilità).

  • Lo stesso calcolo per l'intervallo di confidenza binomiale per i 5 (3) proposti test / ottimizzazione / validazione dei soggetti produce 95% ci per tutti gli intervalli corretti fino al 50% (30%), quindi in base a risultati di test perfetti l'intervallo di confidenza includerebbe comunque 50 / 50 indovinare!

Alcuni articoli che abbiamo scritto su questi argomenti:

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.