SparkR MLlib& spark.ml:最小二乘和glm优化

时间:2016-07-11 17:16:22

标签: r apache-spark apache-spark-mllib sparkr

是否有人能够解释如何在SparkR操作glm中指定优化方法?当我尝试使用glm拟合OLS模型时,我只能指定"normal""auto"作为解算器类型。 SparkR无法解释求解器规范"l-bfgs",这让我相信当我指定"auto"时,SparkR会假设"normal“然后使用分析来估计模型系数LS正规方程。

是否适合GLM具有随机梯度下降和L-BFGS在SparkR中不可用,或者我是否错误地编写了以下评估?

m <- SparkR::glm(y ~ x1 + x2 + x3, data = df, solver = "l-bfgs")

Spark中有大量关于使用迭代方法来拟合GLM的文档,例如: LogisticRegressionWithLBFGSLinearRegressionWithSGD(已讨论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的摘要时,我收到以下错误:

summary(m3) error

作为参考,我通过AWS进行此操作并尝试了不同版本的EMR,包括最新版本(如果有所不同)。另外,我使用的是Spark 1.6.1(R API)。

1 个答案:

答案 0 :(得分:1)

Spark 1.6.2 API documentation is here

  

求解器:
  用于优化的求解器算法,可以是&#34; l-bfgs&#34;,&#34; normal&#34;和&#34; auto&#34;。 &#34; 1- BFGS&#34;表示有限存储器BFGS,它是一种有限存储器的准牛顿优化方法。 &#34;正常&#34;表示使用正规方程作为线性回归问题的解析解。默认值为&#34; auto&#34;这意味着自动选择了解算器算法。

对我来说 - 这看起来值得Apache Spark Jira site上的错误报告。