2016-07-11 36 views
2

任何人都可以解釋如何指定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,如LogisticRegressionWithLBFGSLinearRegressionWithSGD(討論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的總結,我收到以下錯誤:

summary(m3) error

僅供參考,我通過AWS這樣做的,嘗試了多種不同版本的EMR,包括最近的(如果有區別)。另外,我正在使用Spark 1.6.1(R API)。

+0

您正在使用哪個版本的spark? – eliasah

+0

@eliasah,我已經使用我正在使用的Spark版本更新了我的帖子。感謝您的反饋意見! – kathystehl

回答

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.

我 - 這看起來值得在Apache Spark Jira site一個bug報告。

+1

Hi @SpiritusPrana,謝謝你的評論。我知道每個解決方案都做了什麼(保存auto,這是定義模糊的),但是你說你認爲我需要發佈到SparkR Jira板,將這個問題提出來? – kathystehl

+0

在你開啓一個問題之前,你可以用你試過的火花版本來更新你的問題嗎?因此,我們可以重現錯誤 – eliasah

+0

Hi @kathystehl - 是的 - 您的代碼對我來說格式良好,符合API文檔。由於它的行爲並不一致,所以值得研究作爲一個錯誤。可能值得等一會兒,看看Eliasah是否會帶着建議回來。作爲一個沒有Apache項目經驗的R用戶,我記錄了SparkR的一些bug,但我發現開發人員需要支持,並且開放了一些措辭明確的bug報告。 – SpiritusPrana