Wie kann eine lineare Regression für die Big-Data-Einstellung parallel / verteilt ausgeführt werden?

12

Ich arbeite an einem sehr großen linearen Regressionsproblem, dessen Daten so groß sind, dass sie auf einem Cluster von Computern gespeichert werden müssen. Es ist viel zu groß, um alle Samples im Speicher einer einzelnen Maschine (sogar auf der Festplatte) zusammenzufassen.

Um diese Daten zu regressieren, denke ich über einen parallelen Ansatz nach, dh eine Regression für jede einzelne Box durchzuführen und dann das Beta basierend auf den Statistiken jeder einzelnen Beta zu berechnen (wahrscheinlich ein Mittelwert oder ein Median).

macht das irgendeinen sinn Wenn ja, wie soll ich die insgesamt erwarteten von jedem einzelnen R 2 erhalten ?R2R2

James Bond
quelle

Antworten:

9

Kurze Antwort:

Ja, die lineare Regression wurde parallel ausgeführt. Zum Beispiel haben Xiangrui Meng et al. (2016) für maschinelles Lernen in Apache Spark. Es funktioniert mit stochastischem Gradientenabstieg (SGD). In Abschnitt 3, Kernfunktionen, erwähnte der Autor:

Verallgemeinerte lineare Modelle werden über Optimierungsalgorithmen gelernt, die die Gradientenberechnung parallelisieren, wobei schnelle C ++ - basierte lineare Algebra-Bibliotheken für Worker-Berechnungen verwendet werden.

Ein Beispiel für die Funktionsweise von SGD finden Sie in meiner Antwort hier: Wie kann ein stochastischer Gradientenabstieg im Vergleich zum Standardgradientenabstieg Zeit sparen?


Lange Antwort:

Beachten Sie, dass die Notation nicht mit dem von mir angegebenen Link übereinstimmt. Ich bin der Meinung, dass die Matrixnotation in dieser Frage besser ist.

Um eine lineare Regression durchzuführen, versuchen wir dies

minimize Xβy2

Die Ableitung ist

2XT(Xβy)

In kleinen Dateneinstellungen können wir die Ableitung auf und direkt lösen. (zB QR-Zerlegung in R.) In Big-Data-Einstellungen wird die Datenmatrix X.0X zu groß, um im Speicher gespeichert zu werden, und möglicherweise schwer direkt zu lösen. (Ich bin nicht mit der QR-Zerlegung oder Cholesky-Zerlegung für große Matrizen vertraut).

Eine Möglichkeit, dies zu parallelisieren, besteht darin, eine iterative Methode zu verwenden: den stochastischen Gradientenabstieg, bei dem der Gradient mithilfe einer Teilmenge der Daten angenähert werden kann. (Wenn wir , y s verwenden , um eine Teilmenge der Daten darzustellen, kann der Gradient durch 2 X T s ( X s β - y angenähert werdenXsys approximiert werden, und wir können β mit dem approximierten Gradientenaktualisieren).2XsT(Xsβys)β

Darüber hinaus für die R2 können wir -Statistik für alle Daten parallel berechnen oder mithilfe einer Teilmenge der Daten approximieren.R2

Intuition, wie es funktioniert (Mapreduce-Paradigma):

Ich sage immer wieder Annäherung mit einer Teilmenge; Die Intuition, warum dies funktioniert, kann im folgenden Beispiel beschrieben werden: Angenommen, ich habe 100 Milliarden Datenpunkte und wir möchten den Durchschnitt aller Datenpunkte berechnen. Angenommen, die Durchführung einer solchen Operation dauert sehr lange und außerdem können nicht die gesamten Daten im Speicher gespeichert werden.

Was wir tun können, ist, einfach eine Teilmenge von beispielsweise 1 Milliarde Elementen zu nehmen und den Durchschnitt davon zu berechnen. Die so erzeugte Annäherung sollte nicht weit von der Wahrheit entfernt sein (dh unter Verwendung der gesamten Daten).

Zur Parallelisierung können wir 100 Computer verwenden, von denen jeder eine andere Teilmenge der 1 Milliarde Datenpunkte verwendet und deren Durchschnitt berechnet. (Wird allgemein als MAP-Schritt bezeichnet). Führen Sie abschließend einen weiteren Durchschnitt für diese 100 Zahlen aus (auch bekannt als REDUCE-Schritt).

bedeuten(<x,y>)=bedeuten(x)+Mittelwert (y)xy

Verweise:

Xiangrui Meng et al. (2016) . MLlib: Maschinelles Lernen in Apache Spark

Haitao Du
quelle
7

Wie in @ hxd1011 erwähnt, besteht ein Ansatz darin, die lineare Regression als Optimierungsproblem zu formulieren und sie dann mithilfe eines iterativen Algorithmus (z. B. stochastischer Gradientenabstieg) zu lösen. Dieser Ansatz kann parallelisiert werden, es gibt jedoch einige wichtige Fragen: 1) Wie sollte das Problem in Teilprobleme unterteilt werden? 2) Wie sollten Lösungen für die Teilprobleme kombiniert werden, um eine globale Lösung zu erhalten, da Optimierungsalgorithmen wie SGD von Natur aus sequentiell sind?

Zinkevich et al. (2010) beschreiben einige frühere Ansätze zur Parallelisierung über mehrere Maschinen hinweg:

  • 1) Parallelisieren Sie SGD wie folgt: Teilen Sie die Daten auf mehrere Computer auf. Bei jedem Schritt schätzt jede lokale Maschine den Gradienten unter Verwendung einer Teilmenge der Daten. Alle Gradientenschätzungen werden an eine zentrale Maschine übergeben, die sie aggregiert, um eine globale Parameteraktualisierung durchzuführen. Der Nachteil dieses Ansatzes besteht darin, dass eine starke Netzwerkkommunikation erforderlich ist, die die Effizienz verringert.

  • 2) Verteilen Sie die Daten gleichmäßig auf lokale Computer. Jede Maschine löst das Problem mithilfe eines Batch-Solvers genau für ihre eigene Teilmenge der Daten. Die endgültigen Parameterschätzungen der lokalen Maschinen werden gemittelt, um eine globale Lösung zu erhalten. Der Vorteil dieses Ansatzes besteht darin, dass nur sehr wenig Netzwerkkommunikation erforderlich ist. Der Nachteil ist jedoch, dass die Parameterschätzungen nicht optimal sein können.

Sie schlagen einen neuen Ansatz vor:

  • 3) Lassen Sie jeden lokalen Computer zufällig Datenpunkte zeichnen. Führen Sie SGD auf jedem Computer aus. Mitteln Sie schließlich die Parameter über Maschinen hinweg, um eine globale Lösung zu erhalten. Wie (2) erfordert diese Methode wenig Netzwerkkommunikation. Die Parameterschätzungen sind jedoch besser, da jede Maschine auf einen größeren Teil der Daten zugreifen kann.

Der Ansatz der parallelisierten Optimierung ist sehr allgemein und gilt für viele Algorithmen für maschinelles Lernen (nicht nur für lineare Regression).

Eine andere Alternative wäre die Verwendung von parallelen / verteilten Matrixzerlegungsalgorithmen oder linearen Lösern. Die lineare Regression der kleinsten Quadrate hat eine spezielle Struktur, die es ermöglicht, sie mithilfe von Matrixzerlegungsmethoden zu lösen. So lösen Sie es normalerweise bei einem kleineren Datensatz, der in den Speicher passt. Dies kann parallelisiert werden, indem Blöcke der Matrix auf mehrere Maschinen verteilt werden und das Problem dann mithilfe paralleler / verteilter Matrixberechnungen gelöst wird. Angesichts der Tatsache, dass dieser Ansatz stärker auf die Lösung linearer Systeme spezialisiert ist, wäre es interessant zu sehen, wie sich seine Leistung im Vergleich zum allgemeineren Ansatz der verteilten Optimierung verhält. Wenn jemand mehr Informationen dazu liefern kann, würde ich mich freuen zu hören.

Verweise:

Zinkevich et al. (2010) . Parallelisierter stochastischer Gradientenabstieg.

user20160
quelle
+1 gute Antwort, um das Problem zu lösen, das ich nicht im Detail besprochen habe, dh nachdem ich den Gradienten angenähert habe, was zu tun ist.
Haitao Du
@ hxd1011 +1 auch für eine nette Beschreibung von SGD und wie man es mit dem Problem von OP verbindet
user20160
2

Lange, lange, bevor die Karte verkleinert wurde, habe ich das gelöst. Im Folgenden wird auf ein altes Papier von mir im Journal of Econometrics 1980 verwiesen. Es war für die parallele nichtlineare maximale Wahrscheinlichkeit und würde für die M-Schätzung funktionieren.

Die Methode ist genau für Regressionen. Teilen Sie Daten in k Teilmengen auf k Prozessoren / Einheiten auf (könnte auch sequentiell erfolgen). Behalten k Regressionen die Regressionskoeffizienten und die X'X-Matrix für jede bei. Nennen Sie diese b1, ..., bk und W1, ..., Wk, dann sind die Gesamtregressionskoeffizienten gegeben durch b = invers (W1 + .. + Wk) * (W1 * b1 + ... + Wk * bk) eins benötigt einen weiteren Durchlauf durch die Daten, um die Residuen unter Verwendung von b für die Parameter zu berechnen, um Sigma ^ 2 die geschätzte Fehlervarianz, R ^ 2 insgesamt F und dergleichen zu erhalten. Dann ist die Kovarianzmatrix von b genau durch Sigma ^ 2 (invers (W1 + .. + Wk)) gegeben. Oben * zeigt die Matrixmultiplikation an.

https://www.sciencedirect.com/science/article/pii/0304407680900950

Gregory Michael Duncan
quelle
Ich wünschte, ich wüsste deine Arbeit, als ich meine eigene gemacht habe! akademisch.oup.com/imaiai/article-abstract/5/4/379/…
JohnRos