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:
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).
Welche Version von Spark verwenden Sie? – eliasah
@eliasah, Ich habe meinen Beitrag mit der von mir verwendeten Spark-Version aktualisiert. Vielen Dank für Ihr Feedback! – kathystehl