2016-07-11 24 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