任何人都可以解釋如何指定SparkR操作中的優化方法glm
?當我嘗試使用glm
來擬合OLS模型時,我只能指定"normal"
或"auto"
作爲求解器類型。 SparkR是無法解釋的求解器規格"l-bfgs"
,導致我相信,當我做指定"auto"
,SparkR簡單地假設"normal
「,然後估計模型係數分析,使用LS標準方程。SparkR MLlib&spark.ml:最小二乘法和glm優化
是恰如其分的GLMS與隨機梯度下降和L-BFGS在SparkR不可用,還是我錯誤地寫了如下的評價?
m <- SparkR::glm(y ~ x1 + x2 + x3, data = df, solver = "l-bfgs")
有大量的文檔在星火有關使用迭代方法,以適應GLMS,如LogisticRegressionWithLBFGS
和LinearRegressionWithSGD
(討論here) ,但我一直沒有找到一個y R API的這種文檔。這是否僅僅在SparkR中不可用(即SparkR用戶被限制爲解析解析,因此受到數據大小的限制),還是缺少必要的東西?如果它目前在SparkR中不可用,是否應該使用SparkR 2.0.0?
下面,我創建了一個玩具數據集和滿足三個型號,每個都有不同的求解器規格:
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")
在相同的參數估計值的第一個和第二個模型結果(支持我的假設是SparkR是在擬合兩個模型時求解正態方程,因此模型是等價的)。 SparkR能夠適應第三個模型,但是當我嘗試打印GLM的總結,我收到以下錯誤:
僅供參考,我通過AWS這樣做的,嘗試了多種不同版本的EMR,包括最近的(如果有區別)。另外,我正在使用Spark 1.6.1(R API)。
您正在使用哪個版本的spark? – eliasah
@eliasah,我已經使用我正在使用的Spark版本更新了我的帖子。感謝您的反饋意見! – kathystehl