【发布时间】:2016-11-13 17:39:15
【问题描述】:
谁能解释一下如何在 SparkR 操作glm 中指定优化方法?当我尝试用glm 拟合OLS 模型时,我只能指定"normal" 或"auto" 作为求解器类型。 SparkR 无法解释求解器规范 "l-bfgs",这让我相信,当我指定 "auto" 时,SparkR 只是假设 "normal",然后使用 LS 正态方程分析估计模型系数。
在 SparkR 中是否不提供具有随机梯度下降和 L-BFGS 的 GLM 拟合,或者我是否错误地编写了以下评估?
m <- SparkR::glm(y ~ x1 + x2 + x3, data = df, solver = "l-bfgs")
Spark 中有大量关于使用迭代方法来拟合 GLM 的文档,例如LogisticRegressionWithLBFGS 和 LinearRegressionWithSGD(讨论过 here),但我还没有找到 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,我已经用我正在使用的 Spark 版本更新了我的帖子。感谢您的反馈!
标签: r apache-spark apache-spark-mllib sparkr