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β−y∥2
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).2XTs(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).
Mittelwert ( < x , y> ) = Mittelwert ( x ) + Mittelwert (y)xy
Verweise:
Xiangrui Meng et al. (2016) . MLlib: Maschinelles Lernen in Apache Spark