Primo passo per i big data (


21

Supponiamo che tu stia analizzando un enorme insieme di dati al ritmo di miliardi di osservazioni al giorno, in cui ogni osservazione ha un paio di migliaia di variabili numeriche e categoriche sparse e possibilmente ridondanti. Diciamo che c'è un problema di regressione, un problema di classificazione binaria sbilanciato e un compito di "scoprire quali predittori sono più importanti". Il mio pensiero su come affrontare il problema è:

Adattare alcuni modelli predittivi su sottocampioni progressivamente sempre più grandi (casuali) dei dati fino a quando:

  1. L'adattamento e la convalida incrociata del modello diventa difficile dal punto di vista computazionale (ad esempio, irragionevolmente lento sul mio laptop, R esaurisce la memoria, ecc.), OPPURE

  2. L'allenamento e il test RMSE o i valori di precisione / richiamo si stabilizzano.

Se gli errori di addestramento e test non si sono stabilizzati (1.), utilizzare un modello più semplice e / o implementare versioni multicore o multinodo del modello e riavviare dall'inizio.

Se gli errori di addestramento e test si sono stabilizzati (2.):

  • Se (ovvero, posso ancora eseguire algoritmi su quanto non è ancora troppo grande), prova a migliorare le prestazioni espandendo lo spazio delle funzionalità o utilizzando un modello più complesso e riavviando dall'inizio.NSuBSet«NXSuBSet

  • Se è "grande" e l'esecuzione di ulteriori analisi è costosa, analizzare l'importanza e la fine delle variabili.NSuBSet

Ho intenzione di usare pacchetti come biglm, speedglm, multicoree ffin R inizialmente, e successivamente utilizzare algoritmi più complicati e / o più nodi (EC2) come necessario.

Sembra un approccio ragionevole e, in tal caso, hai qualche consiglio o suggerimento specifico? In caso contrario, cosa proveresti invece per un set di dati di queste dimensioni?


1
Sembra un approccio ragionevole. Ho trovato un discorso su un approccio simile: youtube.com/watch?v=X9YVSDWQokQ .
alfa,


@dcl: Grazie - l'idea è un metodo di selezione variabile non lineare, gradevole dal punto di vista computazionale, che si parallelizzerà bene (sebbene sia univariato). Potrei provarlo perché è veloce e molto semplice da programmare. Inizialmente stavo pensando di utilizzare questo fantastico algoritmo: code.google.com/p/rf-ace .
chiuso il

@alfa: mi piace molto questa idea! Utilizzo di un test sequenziale su sottoinsiemi sempre più grandi di dati per eliminare in sequenza i meta-parametri con le prestazioni peggiori. Questo dovrebbe andare molto bene. Grazie! ps ecco una versione cartacea del discorso: biglearn.org/files/papers/biglearn2011_submission_2.pdf
bloccato

Risposte:


2

È necessario verificare i metodi online per la regressione e la classificazione per set di dati di queste dimensioni. Questi approcci ti permetterebbero di utilizzare l'intero set di dati senza doverlo caricare in memoria.

Puoi anche dare un'occhiata a Vowpal Wabbit (VW):

https://github.com/JohnLangford/vowpal_wabbit/wiki

Utilizza un metodo online fuori core, quindi dovrebbe essere in grado di gestire un set di dati di queste dimensioni. Puoi fare regressione e classificazione e ha il supporto per i formati sparsi. Puoi anche fare versioni penalizzate (ad es. Regressione / classificazione di tipo lazo) in VW, che potrebbero migliorare la precisione del tuo modello.


2

Suggerirei di utilizzare Hadoop e RMR (un pacchetto specifico per Map Reduce in R). Con questa strategia è possibile eseguire set di dati di grandi dimensioni su computer con una configurazione economica (probabilmente in due ore si ottiene sia Hadoop che RMR (RHadoop) installati e in esecuzione).

Infatti, se si dispone di più di un computer, è possibile creare un cluster, riducendo i tempi di elaborazione.

Ti do alcuni link a supporto del mio suggerimento:

  • Questo collegamento ti condurrà a un tutorial per l'installazione di Hadoop su un cluster a nodo singolo (un computer).
  • Questo link e questo link ti mostreranno come installare RMR sul tuo cluster Hadoop.
  • E infine, qui puoi trovare un esempio di regressione logistica tramite RHadoop.

Quindi, il mio consiglio è di seguire queste linee guida in quanto è certamente degno se i tuoi dati sono enormi.


0

Questo è più un commento che una risposta, ma non posso pubblicarlo come commento (richiede 50 rep).

Hai provato a utilizzare PCA nel tuo set di dati? Può aiutarti a ridurre lo spazio variabile e trovare una possibile direzione su quale variabile escludere dal tuo modello di regressione. In questo modo, il modello sarà più facile da calcolare. Qui puoi trovare una discussione interessante sull'uso di PCA con variabili categoriche: l' analisi dei componenti principali può essere applicata a set di dati contenenti un mix di variabili continue e categoriali?

Inoltre, immagino che tu stia usando R per molti motivi (io uso anche R), ma potrebbe essere più facile usare un software come SAS o STATA. Funzionano meglio con i big data e non devi occuparti di elaborazione multi-core e parallela.

Infine, prova a pensare se ha senso usare quante più righe possibili dal tuo set di dati. Questo è un set di dati di popolazione, un set di dati di quasi popolazione o un set di dati campionato? È possibile ottenere risultati migliori con un buon campionamento nel set di dati rispetto all'utilizzo di tutti i dati. Dai un'occhiata a questo post: il campionamento è rilevante ai tempi dei "big data"?

Spero che sia di aiuto

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.