任何人都可以解释如何指定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