Come selezionare rapidamente variabili importanti da un set di dati molto grande?


9

Ho un set di dati con circa 2.000 variabili binarie / 200.000 righe e sto cercando di prevedere una singola variabile binaria dipendente. Il mio obiettivo principale in questa fase non è ottenere l'accuratezza della previsione, ma piuttosto identificare quali di queste variabili sono predittori importanti. Vorrei ridurre il numero di variabili nel mio modello finale a circa 100.

Esiste un modo relativamente rapido per ottenere le variabili più importanti? randomForest sembra impiegare molto tempo.

Non devo usare tutte le 200.000 osservazioni, quindi il campionamento è un'opzione sul tavolo.


Per predittori "importanti" piuttosto che "precisi", vuoi dire che vuoi trovare quelli che sono i migliori candidati per spiegare il risultato e aiutarti a costruire una teoria? In tal caso, 100 variabili esplicative sono un numero molto elevato - proibitivamente grande. La costruzione della teoria e la vera spiegazione (piuttosto che la semplice previsione) richiederebbero probabilmente di ridurre il numero di X a 10 o 15.
rolando2

2
@ rolando2 In alcune applicazioni 100 non è affatto grande. Ad esempio, la letteratura sull'accessibilità alla banda larga ad alta velocità indica circa 150 variabili (su molte centinaia analizzate) e tutte sono ragionevoli: si riferiscono alla facilità di ingegneria (terreno, tipo di roccia, clima, ecc.), All'economia (SES, ecc.), Alla demografia, alla geometria dell'infrastruttura di trasporto locale, alla politica (clima fiscale e commerciale), ecc. Credo che molti modelli economici possano includere allo stesso modo molte centinaia di variabili teoricamente importanti.
whuber

@whuber - Sto riflettendo sul tuo punto ... Saresti d'accordo sul fatto che un analista insolitamente dedicato, talentuoso e esperto risolva i ruoli causali (piuttosto che semplicemente predittivi) interpretati da così tante variabili?
rolando2,

@rolando Certo. 2000 variabili richiedono molto lavoro!
whuber

Risposte:


6

È possibile iniziare con un semplice filtro univariato e utilizzare la convalida incrociata per decidere quali variabili conservare. La sbffunzione nel caretpacchetto per R è davvero utile. Puoi leggere di più qui , a partire da pagina 19.


Grazie. Ho appena letto il documento e sembra un approccio solido. Tuttavia sto riscontrando alcuni problemi di memoria sul mio sistema di memoria da 4 MB a 64 bit.
DevX,

1
@DevX: se hai troppi dati, potresti provare a prendere un campione e scegliere le variabili in base al campione?
Zach,

13

Questo suona come un problema adatto per il lazo e gli amici che fanno restringimento e selezione variabile. Gli elementi dell'apprendimento statistico descrivono il lazo e la rete elastica per la regressione e, cosa più rilevante per questo problema, la regressione logistica.

Gli autori del libro hanno reso disponibile un'implementazione efficiente di lazo e rete elastica come pacchetto R chiamato glmnet . In precedenza ho usato questo pacchetto per l'analisi dei dati binari con matrici di dati di circa 250.000 righe, anche se un po 'meno colonne, ma in realtà eseguendo regressioni di tutte le colonne rispetto a tutte le altre colonne. Se anche la matrice di dati è scarsa, anche l'implementazione può trarne vantaggio e credo che il metodo possa effettivamente funzionare per il set di dati completo dei PO. Ecco alcuni commenti sul lazo:

  • 1
  • La selezione del parametro di ottimizzazione viene spesso effettuata mediante convalida incrociata, ma anche senza la fase di convalida incrociata il metodo potrebbe essere in grado di fornire una buona sequenza di variabili selezionate indicizzate dal parametro di penalità.
  • L'aspetto negativo, per la selezione delle variabili, è che il lazo può essere instabile nella selezione delle variabili, in particolare se sono in qualche modo correlate. La penalità netta elastica più generale è stata inventata per migliorare questa instabilità, ma non risolve completamente il problema. Il lazo adattivo è un'altra idea per migliorare la selezione variabile per il lazo.
  • La selezione della stabilità è un metodo generale suggerito da Meinshausen e Bühlmann per ottenere una maggiore stabilità delle variabili selezionate con metodi come il lazo. Richiede una serie di adattamenti ai sottocampioni del set di dati ed è, in quanto tale, molto più impegnativo dal punto di vista computazionale.
  • Un modo ragionevole di pensare al lazo è come un metodo per generare un insieme monodimensionale di modelli "buoni" che vanno da un modello a singola variabile a un modello più complicato (non necessariamente includendo tutte le variabili) parametrizzato dal parametro di penalità. Al contrario, i filtri univariati producono solo una selezione o un ordinamento di buoni modelli a singola variabile.

Per Python esiste un'implementazione in scikit-learn di metodi come il lazo e la rete elastica.


Come nozione aggiuntiva, se il numero di potenziali predittori sale alle stelle, come in GWAS, potresti fare qualcosa di simile a questo articolo per preselezionare: analisi di associazione a livello del genoma mediante lasso penalizzato regressione logistica
Nick Sabbe

@NickSabbe, grazie per questo riferimento. E 'molto utile. Nel contesto di GWAS, e probabilmente anche in altri contesti con un numero enorme di predittori correlati, ho sentito Sylvia Richardson raccomandare la selezione del modello bayesiano sulla base, ad esempio, di alcuni confronti con la selezione della stabilità. I calcoli MCMC erano davvero impegnativi, però.
NRH

Penso che valga la pena sottolineare più il lazo adattivo in quanto è facile da implementare (quasi solo due chiamate anziché una glmnetin R). Un'altra opzione è Soglia del lazo, che è anche abbastanza semplice da implementare. Vedere la sezione 2.9 di springer.com/gp/book/9783642201912 .
Benjamin Christoffersen,

2

Si potrebbe fare un test di regressione logistica / chi-quadrato dell'associazione per ogni variabile e conservare solo quelli che hanno un valore p inferiore a un certo valore, ad esempio .2.


4
Per avere un'idea di come questa raccomandazione possa essere eseguita, considera un caso in cui ci sono 100 (diciamo) predittori importanti (altamente correlati con la variabile dipendente) e il resto non è completamente correlato alla variabile dipendente e l'uno all'altro. Il mantenimento di quelli con valori di p inferiori a 0,2 assicura che si finirà con circa 100 + 0,2 * (2000-100) = 480 variabili, di cui 380 senza valore. Per piccoli set di dati questo approccio viene talvolta utilizzato come una schermata iniziale rapida, ma in realtà non può essere considerato seriamente qui.
whuber

Buon punto @whuber. Dovresti impostare un livello alfa molto più basso per mantenere circa 100, ma potresti perdere le variabili che possono influire sulla regolazione degli altri. Tuttavia, andare dal 2000 al 480 potrebbe essere più gestibile nella gestione di qualcosa come foreste casuali.
Glen,

Hai ragione, c'è un merito in tale screening - se funziona correttamente. 480 è una riduzione, ma ci sono ulteriori problemi legati alla possibilità di alte correlazioni tra tutte le 2000 variabili originali. Ciò può causare il mancato mantenimento di una o tutte le 100 variabili corrette, come illustrato in alcune delle risposte a una domanda correlata .
whuber
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.