2016-07-11 27 views
2

Würde jemand erklären können, wie man Optimierungsmethoden in der SparkR-Operation glm spezifiziert? Wenn ich ein OLS-Modell mit glm anpassen möchte, kann ich nur "normal" oder "auto" als Solver-Typ angeben. SparkR ist nicht in der Lage, die Solver-Spezifikation "l-bfgs" zu interpretieren, führt mich zu glauben, dass, wenn ich "auto" tun angeben, SparkR gehen einfach davon aus "normal "und schätzt dann das Modell analytisch-Koeffizienten, die LS normale Gleichung.SparkR MLlib & spark.ml: kleinste Quadrate und Glm-Optimierung

ziemt GLMs mit stochastischer Gradienten-Abstieg-und L-BFGS nicht verfügbar in SparkR, oder bin ich die folgende Bewertung schreibe falsch?

m <- SparkR::glm(y ~ x1 + x2 + x3, data = df, solver = "l-bfgs") 

Es gibt viel Dokumentation in Funken über iterative Methoden GLMs passen, zB LogisticRegressionWithLBFGS und LinearRegressionWithSGD (diskutiert here) , aber ich konnte keine finden y solche Dokumentation für die R-API. Ist das in SparkR einfach nicht verfügbar (d. H. Sind SparkR-Benutzer gezwungen, analytisch zu arbeiten und daher in der Größe unserer Daten eingeschränkt zu sein), oder fehlt mir hier etwas Wesentliches? Wenn es in SparkR derzeit nicht verfügbar ist, soll es mit SparkR 2.0.0 herauskommen?

Below schaffe ich eine Spielzeug Datensatz und drei Modelle passen, von denen jeder mit einer anderen Solver Spezifikation:

x1 <- rnorm(n=200, mean=10, sd=2) 
x2 <- rnorm(n=200, mean=17, sd=3) 
x3 <- rnorm(n=200, mean=8, sd=1) 
y <- 1 + .2 * x1 + .4 * x2 + .5 * x3 + rnorm(n=200, mean=0, sd=.1) 
dat <- cbind.data.frame(y, x1, x2, x3) 

df <- as.DataFrame(sqlContext, dat) 

m1 <- SparkR::glm(y ~ x1 + x2 + x3, data = df, solver = "normal") 
m2 <- SparkR::glm(y ~ x1 + x2 + x3, data = df, solver = "auto") 
m3 <- SparkR::glm(y ~ x1 + x2 + x3, data = df, solver = "l-bfgs") 

Die erste und zweite Modellergebnis in den gleichen Parameterschätzwerte (meine Annahme unterstützt, dass SparkR ist Lösen der Normalgleichung bei der Anpassung beider Modelle und folglich sind die Modelle äquivalent). SparkR in der Lage, das dritte Modell passen, aber wenn ich versuche, eine Zusammenfassung der GLM zu drucken, erhalte ich folgende Fehlermeldung:

summary(m3) error

Als Referenz ich dies durch AWS tue und habe verschiedene Versionen ausprobiert von EMR, einschließlich der neuesten (falls es einen Unterschied macht). Außerdem verwende ich Spark 1.6.1 (R API).

+0

Welche Version von Spark verwenden Sie? – eliasah

+0

@eliasah, Ich habe meinen Beitrag mit der von mir verwendeten Spark-Version aktualisiert. Vielen Dank für Ihr Feedback! – kathystehl

Antwort

1

Spark 1.6.2 API documentation is here

solver:
The solver algorithm used for optimization, this can be "l-bfgs", "normal" and "auto". "l-bfgs" denotes Limited-memory BFGS which is a limited-memory quasi-Newton optimization method. "normal" denotes using Normal Equation as an analytical solution to the linear regression problem. The default value is "auto" which means that the solver algorithm is selected automatically.

Für mich - das sieht einen Fehlerbericht auf der Apache Spark Jira site würdig.

+1

Hallo @SpiritusPrana, danke für deinen Kommentar. Ich weiß, was jeder der jeweiligen Solver macht (automatisches Speichern, was definitionsgemäß verdeckt ist), aber du sagst, dass du denkst, dass ich auf das SparkR Jira-Board posten muss, was das Problem aufwirft? – kathystehl

+0

bevor Sie ein Problem bitte öffnen, können Sie Ihre Frage mit welcher Spark-Version haben Sie dies versucht? So können wir den Fehler reproduzieren – eliasah

+0

Hallo @katystyehl - ja - Ihr Code sieht gut aus und im Einklang mit der API-Dokumentation. Da es sich nicht konsequent verhält, ist es wert, als Bug untersucht zu werden. Es lohnt sich wahrscheinlich, ein wenig zu warten, um zu sehen, ob Eliasah mit Ratschlägen zurückkommt. Als ein R-Benutzer ohne Erfahrung mit Apache-Projekten war ich ein bisschen eingeschüchtert mit der Protokollierung von SparkR-Fehlern, aber ich habe festgestellt, dass die Entwickler unterstützend und offen für klar formulierte Fehlerberichte sind. – SpiritusPrana