Regressione logistica su Big Data


9

Ho un set di dati di circa 5000 funzionalità. Per quei dati ho usato per la prima volta il test Chi Square per la selezione delle caratteristiche; successivamente, ho ottenuto circa 1500 variabili che mostravano una relazione significativa con la variabile response.

Ora devo adattarmi alla regressione logistica su questo. Sto usando il pacchetto glmulti per R (il pacchetto glmulti fornisce un'efficiente selezione di sottoinsiemi per vlm) ma può usare solo 30 funzioni alla volta, altrimenti le sue prestazioni diminuiscono poiché il numero di righe nel mio set di dati è di circa 20000.

Esistono altri approcci o tecniche per risolvere i problemi di cui sopra? Se seguo il metodo sopra ci vorrà troppo tempo per adattarsi al modello.


8
Se riesci ad adattare il tuo set di dati alla memoria di una singola macchina, non lo definirei un problema di "Big Data", specialmente se lo fai nel titolo della tua domanda
logc

Sto usando sklearn's LogisticRegressione risolve un 4000 caratteristiche, 20.000 righe problema in circa un minuto sul mio portatile.
Thomas Ahle,

Risposte:


13

Non è appropriato eseguire lo screening delle funzionalità e quindi inserire le funzionalità sopravvissute in un metodo che non comprende la quantità di tortura di dati precedentemente eseguita. È meglio utilizzare un metodo in grado di gestire tutte le potenziali funzionalità (ad es. Rete elastica). Anche i suggerimenti di altri sull'utilizzo della riduzione dei dati sono idee eccellenti.


Ci sono prove per questo? O / w sembra tanto euristico quanto la proiezione dei lungometraggi.
Zubin,

2
La stima della massima probabilità penalizzata tiene conto del contesto, ad esempio nel lazo la stima del coefficiente di regressione di una variabile sarà inferiore se si considerano 1000 variabili non selezionate rispetto a se si considerano 100 variabili non selezionate. Altrimenti, le variabili vengono selezionate in modo distorto e il refitting della variabile in un secondo passaggio perde il contesto.
Frank Harrell,

Potresti approfondire cosa intendi per distorto qui? Mi chiedo, perché in un senso banale il lazo è sempre di parte, quindi devi fare riferimento ad un ulteriore pregiudizio. Inoltre, ci sono alcuni approcci in due fasi con proprietà ragionevoli, ad esempio pdfs.semanticscholar.org/d90a/…
jmb,

2
Il lazo inclina intenzionalmente i coefficienti verso lo zero per evitare un eccesso di adattamento. I parametri non aperti portano a valori previsti troppo estremi. Il montaggio di variabili "selezionate" in un modello non aperto annullerà la distorsione da lazo necessaria , creando un eccesso di adattamento dei valori previsti.
Frank Harrell,

10

Un primo approccio consiste nell'utilizzare PCA per ridurre la dimensionalità del set di dati. Cerca di mantenere ~ il 97% della varianza totale, questo potrebbe essere d'aiuto.

Un'altra opzione è quella di utilizzare qualcosa come la discesa gradiente stocastica, questo può essere un algoritmo molto più veloce e in grado di adattarsi alla memoria di R.

EDIT: Un problema con R è che puoi usare solo la tua RAM, quindi se hai solo 8 GB di memoria, questo è ciò a cui sei limitato. Ho riscontrato molti problemi con questo e da allora ho iniziato ad usare Scikit-Learn di Python che sembra gestire molto meglio i set di dati più grandi.

Un grafico molto bello che dà un'idea dei luoghi da cui iniziare in base alle dimensioni del set di dati può essere trovato qui: http://3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flow -chart.jpg

inserisci qui la descrizione dell'immagine


8
Una grande preoccupazione nell'uso di PCA in questo modo è che tutta la relazione tra la variabile di risposta e le variabili indipendenti potrebbe risiedere nel 3% della varianza totale che si trascura. Non sembra esserci alcun modo generale per determinare quanti componenti principali utilizzare, poiché il componente più piccolo potrebbe essere proporzionale alla risposta stessa e costituirebbe quindi la scelta ottimale delle variabili da includere.
whuber

1
Penso che se si è in grado di caricare il set di dati nella memoria principale (cosa che presumo sia il caso considerando ciò che si spiega), la discesa stocastica del gradiente è il primo passo che si dovrebbe fare prima di provare le tecniche di riduzione della dimensionalità. Con Scikit-learn su Python (o R, ma non sono un utente di questa lingua), questo funzionerebbe perfettamente.
Bertrand R,

Penso che questa sia una risposta utile, ma penso che l'OP stia chiedendo della regressione logistica e non della riduzione delle funzionalità. Forse puoi affrontare quella parte della domanda in un'edizione?
logc,

Non sono sicuro di quanto sia utile la PCA per i problemi di regressione. Il problema è questo: PCA mantiene i valori singolari più grandi della matrice di input, ma lo pseudo-inverso della matrice inverte i valori singolari, quindi vuoi davvero mantenere il più piccolo dei valori originali. Potrebbe essere meglio solo disegnare i dati: arxiv.org/abs/1411.4357
Thomas Ahle,

4

Come già accennato da @Frank Harrell, l'uso della rete elastica o di LASSO per eseguire una regressione penalizzata con tutte le 5000 funzioni ( p ) sarebbe un buon inizio per la selezione delle caratteristiche (non si possono semplicemente rimuovere 3500 variabili perché non sono "statisticamente significative" con il variabile dipendente di interesse). Uno di questi metodi può essere eseguita utilizzando il pacchetto R, glmnet.

Per tenere conto delle relazioni condivise tra le potenziali variabili predittive di interesse ( p = 5000), consiglierei di eseguire una foresta casuale usando il randomForestpacchetto e / o il potenziamento del gradiente usando il gbmpacchetto per valutare l'importanza relativa delle potenziali variabili predittive per quanto riguarda l'esito binario. Con queste informazioni, sarai molto più preparato a costruire un modello di regressione logistica più parsimonioso.


3
Y

1

Suppongo che non ti limiti a R, dal momento che questo è un problema di big data che probabilmente non dovresti essere. Puoi provare MLlib , che è la libreria di apprendimento automatico scalabile di Apache Spark.

Apache Spark , a sua volta, è un motore veloce e generale per l'elaborazione dei dati su larga scala in memoria. Questi operano su un framework Hadoop che consente l'elaborazione distribuita di grandi set di dati tra cluster di computer utilizzando semplici modelli di programmazione. È progettato per scalare da singoli server a migliaia di macchine, ognuna delle quali offre elaborazione e archiviazione locali.

Nota che "migliaia di macchine" è facoltativo (!), Puoi anche configurarlo sul desktop di lavoro / casa locale.

Tornando a MLlib, viene fornito con gli algoritmi di seguito pronti all'uso:

  • K-significa raggruppare con K-significa || inizializzazione.
  • Regressione lineare regolarizzata L1 e L2.
  • Regressione logistica regolarizzata L1 e L2.
  • Filtraggio collaborativo dei minimi quadrati alternati, con valutazioni esplicite o feedback implicito.
  • Classificazione multinomiale di Naive Bayes.
  • Discesa gradiente stocastica.

Se lavori regolarmente con big data, potresti dover adottare una soluzione Hadoop.


0

Puoi provare Vowpal Wabbit: Vowpal Wabbit . Funziona bene con set di dati molto grandi e un numero molto elevato di funzionalità.

secondo il sito web:

Questo è un progetto avviato su Yahoo! Ricerca e proseguimento presso Microsoft Research per progettare un algoritmo di apprendimento rapido, scalabile e utile. VW è l'essenza della velocità nell'apprendimento automatico, in grado di apprendere facilmente da set di dati terafeature. Tramite l'apprendimento parallelo, può superare la velocità effettiva di qualsiasi interfaccia di rete di una singola macchina quando si fa l'apprendimento lineare, una novità tra gli algoritmi di apprendimento.

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.