Logistische Regression bei Big Data

9

Ich habe einen Datensatz von rund 5000 Funktionen. Für diese Daten habe ich zuerst den Chi-Quadrat-Test zur Merkmalsauswahl verwendet. Danach erhielt ich ungefähr 1500 Variablen, die eine signifikante Beziehung zur Antwortvariablen zeigten.

Jetzt muss ich die logistische Regression darauf abstimmen. Ich verwende das glmulti-Paket für R (das glmulti-Paket bietet eine effiziente Auswahl von Teilmengen für vlm), kann jedoch nur 30 Funktionen gleichzeitig verwenden. Andernfalls nimmt die Leistung ab, da die Anzahl der Zeilen in meinem Datensatz etwa 20000 beträgt.

Gibt es einen anderen Ansatz oder andere Techniken, um die oben genannten Probleme zu lösen? Wenn ich die oben beschriebene Methode verwende, dauert es zu lange, bis das Modell passt.

Vijay
quelle
8
Wenn Sie Ihren Datensatz in den Speicher eines einzelnen Computers einfügen können, würde ich dies nicht als "Big Data" -Problem bezeichnen, insbesondere wenn Sie dies im Titel Ihrer Frage
tun
Ich verwende sklearn's LogisticRegressionund es löst ein Problem mit 4000 Funktionen und 20.000 Zeilen in ungefähr einer Minute auf meinem Laptop.
Thomas Ahle

Antworten:

13

Es ist nicht angebracht, ein Feature-Screening durchzuführen und dann überlebende Features in eine Methode einzuspeisen, die nicht versteht, wie viel Datenfolter zuvor durchgeführt wurde. Es ist besser, eine Methode zu verwenden, die alle potenziellen Merkmale (z. B. elastisches Netz) handhabt. Die Vorschläge anderer zur Verwendung der Datenreduktion sind ebenfalls hervorragende Ideen.

Frank Harrell
quelle
Gibt es Beweise dafür? O / w scheint es genauso heuristisch zu sein wie Feature-Screening.
Zubin
2
Die Schätzung der bestraften maximalen Wahrscheinlichkeit berücksichtigt den Kontext, z. B. ist die Regressionskoeffizientenschätzung einer Variablen im Lasso kleiner, wenn Sie 1000 nicht ausgewählte Variablen berücksichtigt haben, als wenn Sie 100 nicht ausgewählte Variablen berücksichtigt haben. Andernfalls werden Variablen voreingenommen ausgewählt, und das erneute Anpassen der Variablen in einem zweiten Schritt verliert den Kontext.
Frank Harrell
Könnten Sie näher erläutern, was Sie hier mit voreingenommen meinen? Ich frage mich, weil das Lasso in einem trivialen Sinne immer voreingenommen ist, so dass Sie sich auf eine zusätzliche Voreingenommenheit beziehen müssen. Es gibt auch einige zweistufige Ansätze mit angemessenen Eigenschaften, z. B. pdfs.semanticscholar.org/d90a/…
jmb
2
Das Lasso spannt die Koeffizienten absichtlich gegen Null, um eine Überanpassung zu verhindern. Unpenalisierte Parameter führen zu vorhergesagten Werten, die zu extrem sind. Durch das Anpassen "ausgewählter" Variablen in einem nicht bestraften Modell wird die erforderliche Lasso- Verzerrung rückgängig gemacht , wodurch die vorhergesagten Werte stark überangepasst werden.
Frank Harrell
10

Ein erster Ansatz ist die Verwendung von PCA, um die Dimensionalität des Datensatzes zu reduzieren. Versuchen Sie, ~ 97% der Gesamtvarianz beizubehalten. Dies kann sehr hilfreich sein.

Eine andere Möglichkeit ist die Verwendung eines stochastischen Gradientenabfalls. Dies kann ein viel schnellerer Algorithmus sein und in den Speicher von R passen.

BEARBEITEN: Ein Problem mit R ist, dass Sie nur Ihren RAM verwenden können. Wenn Sie also nur 8 GB Speicher haben, sind Sie darauf beschränkt. Ich bin damit auf viele Probleme gestoßen und habe seitdem Pythons Scikit-Learn verwendet, das größere Datensätze viel besser zu handhaben scheint.

Ein sehr schönes Diagramm, das anhand Ihrer Datensatzgröße eine Vorstellung von den Startpunkten gibt, finden Sie hier: http://3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flow -chart.jpg

Geben Sie hier die Bildbeschreibung ein

mike1886
quelle
8
Ein großes Problem bei der Verwendung von PCA auf diese Weise ist, dass die gesamte Beziehung zwischen der Antwortvariablen und den unabhängigen Variablen in den 3% der Gesamtvarianz liegen kann, die Sie vernachlässigen. Es scheint auch keine allgemeine Möglichkeit zu geben, zu bestimmen, wie viele Hauptkomponenten verwendet werden sollen, da die kleinste Komponente proportional zur Antwort selbst sein könnte und somit die optimale Auswahl der einzuschließenden Variablen darstellen würde.
whuber
1
Ich denke, wenn Sie in der Lage sind, den Datensatz in den Hauptspeicher zu laden (was meiner Meinung nach der Fall ist, wenn man bedenkt, was Sie erklären), ist der stochastische Gradientenabstieg der erste Schritt, den Sie unternehmen sollten, bevor Sie Techniken zur Reduzierung der Dimensionalität ausprobieren. Mit Scikit-learn auf Python (oder R, aber ich bin kein Benutzer dieser Sprache) würde dies gut funktionieren.
Bertrand R
Ich denke, dies ist eine nützliche Antwort, aber ich denke, das OP fragt nach der logistischen Regression und nicht nach der Funktionsreduzierung. Vielleicht können Sie diesen Teil der Frage in einer Ausgabe ansprechen?
Logc
Ich bin mir nicht sicher, wie nützlich PCA für Regressionsprobleme ist. Das Problem ist folgendes: PCA behält die größten Singularwerte der Eingabematrix bei, aber die Pseudo-Inverse der Matrix invertiert die Singularwerte, sodass Sie wirklich den kleinsten der ursprünglichen Werte beibehalten möchten . Es könnte besser sein, nur die Daten zu skizzieren: arxiv.org/abs/1411.4357
Thomas Ahle
4

Wie @Frank Harrell bereits erwähnt hat, wäre die Verwendung eines elastischen Netzes oder LASSO zur Durchführung einer bestraften Regression mit allen 5000 Merkmalen ( p ) ein guter Anfang für die Merkmalsauswahl (man kann 3500 Variablen nicht einfach entfernen, da sie mit dem nicht "statistisch signifikant" sind abhängige interessierende Variable). Jede dieser Methoden kann mit dem R-Paket ausgeführt werden glmnet.

Um die Beziehungen zu berücksichtigen, die zwischen den potenziellen interessierenden Prädiktorvariablen geteilt werden ( p = 5000), würde ich empfehlen, eine zufällige Gesamtstruktur mit dem randomForestPaket und / oder eine Gradientenverstärkung mit dem gbmPaket auszuführen, um die relative Bedeutung der potenziellen Prädiktorvariablen zu bewerten in Bezug auf das binäre Ergebnis. Mit diesen Informationen sind Sie viel besser darauf vorbereitet, ein sparsameres logistisches Regressionsmodell zu erstellen.

Matt Reichenbach
quelle
3
Y.
1

Ich gehe davon aus, dass Sie nicht auf R beschränkt sind, da dies ein Big-Data-Problem ist, das Sie wahrscheinlich nicht sein sollten. Sie können MLlib ausprobieren , die skalierbare Bibliothek für maschinelles Lernen von Apache Spark.

Apache Spark wiederum ist eine schnelle und allgemeine Engine für die speicherinterne Verarbeitung großer Datenmengen. Diese arbeiten mit einem Hadoop-Framework, das die verteilte Verarbeitung großer Datenmengen über Computercluster mithilfe einfacher Programmiermodelle ermöglicht. Es wurde entwickelt, um von einzelnen Servern auf Tausende von Computern zu skalieren, von denen jeder lokale Berechnungen und Speicher bietet.

Beachten Sie, dass "Tausende von Computern" optional (!) Ist. Sie können es auch auf Ihrem lokalen Arbeits- / Heim-Desktop einrichten.

Zurück zu MLlib: Die folgenden Algorithmen sind sofort einsatzbereit:

  • K-bedeutet Clustering mit K-bedeutet || Initialisierung.
  • L1- und L2-regulierte lineare Regression.
  • L1- und L2-regulierte logistische Regression.
  • Alternierende kollaborative Filterung der kleinsten Quadrate mit expliziten Bewertungen oder implizitem Feedback.
  • Naive Bayes multinomiale Klassifikation.
  • Stochastischer Gradientenabstieg.

Wenn Sie regelmäßig mit Big Data arbeiten, müssen Sie möglicherweise eine Hadoop-Lösung verwenden.

Zhubarb
quelle
0

Sie können Vowpal Wabbit: Vowpal Wabbit ausprobieren . Es funktioniert gut mit sehr großen Datenmengen und einer sehr großen Anzahl von Funktionen.

laut der Website:

Dies ist ein Projekt, das bei Yahoo! Forschung und Fortsetzung bei Microsoft Research, um einen schnellen, skalierbaren und nützlichen Lernalgorithmus zu entwickeln. VW ist die Essenz der Geschwindigkeit beim maschinellen Lernen, das problemlos aus Terafeature-Datensätzen lernen kann. Durch paralleles Lernen kann der Durchsatz jeder einzelnen Maschinennetzwerkschnittstelle beim linearen Lernen überschritten werden - eine Premiere unter den Lernalgorithmen.

user765195
quelle