Erster Schritt für Big Data ( , )

21

Angenommen, Sie analysieren einen riesigen Datensatz mit Milliarden von Beobachtungen pro Tag, wobei jede Beobachtung einige Tausend spärliche und möglicherweise redundante numerische und kategoriale Variablen enthält. Angenommen, es gibt ein Regressionsproblem, ein Problem der unausgeglichenen binären Klassifizierung und die Aufgabe, herauszufinden, welche Prädiktoren am wichtigsten sind. Mein Gedanke, wie ich das Problem angehen soll, ist:

Passen Sie ein Vorhersagemodell an immer größere (zufällige) Teilstichproben der Daten an, bis:

  1. Die Anpassung und Kreuzvalidierung des Modells wird rechnerisch schwierig (z. B. unangemessen langsam auf meinem Laptop, R verfügt nicht über genügend Arbeitsspeicher usw.), ODER

  2. Die Trainings- und Test-RMSE- oder Präzisions- / Rückrufwerte stabilisieren sich.

Wenn sich die Trainings- und Testfehler nicht stabilisiert haben (1.), verwenden Sie ein einfacheres Modell und / oder implementieren Sie Multicore- oder Multinode-Versionen des Modells und starten Sie von Anfang an neu.

Wenn sich die Trainings- und Testfehler stabilisiert haben (2.):

  • Wenn (dh ich kann immer noch Algorithmen auf ausführen, da es noch nicht zu groß ist), versuchen Sie, die Leistung zu verbessern, indem Sie den Funktionsbereich erweitern oder ein komplexeres Modell verwenden und von Anfang an neu starten.NsubsetNXsubset

  • Wenn 'groß' ist und das Ausführen weiterer Analysen kostspielig ist, analysieren Sie die variable Wichtigkeit und das Ende.Nsubset

Ich plane Pakete zu benutzen und wie biglm, speedglm, multicoreund ffin R zunächst und später verwendet mehr komplizierte Algorithmen und / oder Mehrfachknoten (auf EC2) nach Bedarf.

Klingt dies nach einem vernünftigen Ansatz, und wenn ja, haben Sie spezielle Ratschläge oder Vorschläge? Wenn nicht, was würden Sie stattdessen für einen Datensatz dieser Größe versuchen?

abgesperrt
quelle
1
Das klingt nach einem vernünftigen Ansatz. Ich fand einen Vortrag über einen ähnlichen Ansatz: youtube.com/watch?v=X9YVSDWQokQ .
Alfa
2
jmlr.csail.mit.edu/proceedings/papers/v7/miller09/miller09.pdf Dies könnte hilfreich sein. Weitere Details zur Mathematik hier: ms.unimelb.edu.au/~millerh/papers/gencor_JCGS.pdf
dcl
@dcl: Danke - die Idee ist eine nette, rechengünstige, nichtlineare Variablenauswahlmethode, die gut parallelisiert wird (obwohl sie univariat ist). Ich könnte es versuchen, weil es schnell und sehr einfach zu programmieren ist. Ich dachte ursprünglich daran, diesen sehr coolen Algorithmus zu verwenden: code.google.com/p/rf-ace .
gesperrt
@alfa: Ich mag diese Idee wirklich! Verwenden eines sequenziellen Tests für immer größere Teilmengen der Daten, um die Metaparameter mit der schlechtesten Leistung sequenziell zu eliminieren. Dies sollte die Dinge erheblich verbessern. Vielen Dank! ps hier ist eine Papierversion des Vortrags: biglearn.org/files/papers/biglearn2011_submission_2.pdf
lockedoff

Antworten:

2

Sie sollten Online-Methoden zur Regression und Klassifizierung für Datensätze dieser Größe prüfen. Mit diesen Ansätzen können Sie den gesamten Datensatz verwenden, ohne ihn in den Speicher laden zu müssen.

Du könntest auch Vowpal Wabbit (VW) ausprobieren:

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

Es wird eine Out-of-Core-Onlinemethode verwendet, sodass es in der Lage sein sollte, einen Datensatz dieser Größe zu verarbeiten. Sie können Regression und Klassifizierung durchführen und es werden nur spärliche Formate unterstützt. Sie können in VW auch strafbare Versionen (z. B. Lasso-Typ-Regression / -Klassifikation) ausführen, um die Genauigkeit Ihres Modells zu verbessern.

user1489497
quelle
2

Ich würde vorschlagen, Hadoop und RMR (ein spezielles Paket für Map Reduce in R) zu verwenden. Mit dieser Strategie können Sie große Datenmengen auf Standardcomputern mit einer erschwinglichen Konfiguration ausführen (wahrscheinlich haben Sie in zwei Stunden sowohl Hadoop als auch RMR (RHadoop) installiert und ausgeführt).

Wenn Sie mehr als einen Computer haben, können Sie einen Cluster erstellen und so die Verarbeitungszeit verkürzen.

Ich gebe Ihnen einige Links, die meinen Vorschlag unterstützen:

  • Dieser Link führt Sie zu einem Lernprogramm für die Installation von Hadoop auf einem Cluster mit nur einem Knoten (einem Computer).
  • Dieser Link und dieser Link zeigen Ihnen, wie Sie RMR auf Ihrem Hadoop-Cluster installieren.
  • Und schließlich finden Sie hier ein Beispiel für eine logistische Regression mit RHadoop.

Daher rate ich Ihnen, diese Richtlinien zu befolgen, da es sich sicher lohnt, wenn Ihre Daten riesig sind.

a.desantos
quelle
0

Dies ist eher ein Kommentar als eine Antwort, aber ich kann ihn nicht als Kommentar posten (erfordert 50 Wiederholungen).

Haben Sie versucht, PCA für Ihren Datensatz zu verwenden? Es kann Ihnen helfen, den Variablenraum zu verkleinern und eine mögliche Richtung zu finden, in der Variablen von Ihrem Regressionsmodell ausgeschlossen werden. Auf diese Weise lässt sich das Modell leichter berechnen. Hier finden Sie eine interessante Diskussion zur Verwendung von PCA mit kategorialen Variablen: Kann die Hauptkomponentenanalyse auf Datensätze angewendet werden, die eine Mischung aus kontinuierlichen und kategorialen Variablen enthalten?

Ich stelle mir auch vor, dass Sie R aus vielen Gründen verwenden (ich verwende auch R), aber es ist möglicherweise einfacher, eine Software wie SAS oder STATA zu verwenden. Sie arbeiten mit Big Data besser und Sie müssen sich nicht mit Multi-Core- und Parallel-Computing befassen.

Versuchen Sie abschließend zu überlegen, ob es sinnvoll ist, so viele Zeilen wie möglich aus Ihrem Dataset zu verwenden. Dies ist ein Bevölkerungsdatensatz, ein Quasi-Bevölkerungsdatensatz oder ein Stichprobendatensatz? Mit einer guten Stichprobe in Ihrem Datensatz erzielen Sie möglicherweise bessere Ergebnisse als mit den gesamten Daten. Werfen Sie einen Blick auf diesen Beitrag: Ist Stichproben in Zeiten von Big Data relevant?

Hoffe das hilft

Pietrop
quelle