Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SparkR MLlib&;spark.ml:最小二乘法和glm优化_R_Apache Spark_Apache Spark Mllib_Sparkr - Fatal编程技术网

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

SparkR MLlib&;spark.ml:最小二乘法和glm优化,r,apache-spark,apache-spark-mllib,sparkr,R,Apache Spark,Apache Spark Mllib,Sparkr,有谁能解释一下如何在SparkR操作glm中指定优化方法吗?当我尝试使用glm拟合OLS模型时,我只能指定为“正常”或为“自动”,作为解算器类型。SparkR无法解释解算器规范“l-bfgs”,这让我相信,当我指定“auto”时,SparkR只是假设“normal”,然后使用LS normal方程解析地估计模型系数 在SparkR中,使用随机梯度下降和L-BFGS拟合GLMs是否不可用,或者我是否错误地编写了以下评估 m <- SparkR::glm(y ~ x1 + x2 + x3, d

有谁能解释一下如何在SparkR操作
glm
中指定优化方法吗?当我尝试使用
glm
拟合OLS模型时,我只能指定
为“正常”
为“自动”
,作为解算器类型。SparkR无法解释解算器规范“l-bfgs”,这让我相信,当我指定
“auto”
时,SparkR只是假设
“normal
”,然后使用LS normal方程解析地估计模型系数

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

m <- SparkR::glm(y ~ x1 + x2 + x3, data = df, solver = "l-bfgs")
第一个和第二个模型的参数估计值相同(支持我的假设,即SparkR在拟合两个模型时正在求解正态方程,因此,模型是等效的)。SparkR能够适应第三个模型,但当我尝试打印GLM摘要时,收到以下错误:

作为参考,我是通过AWS来做这件事的,并尝试了不同版本的EMR,包括最近的版本(以防有所不同)。此外,我正在使用Spark 1.6.1(R API)。

解算器:
用于优化的解算器算法,可以是“l-bfgs”、“正常”和“自动”。“l-bfgs”表示有限记忆bfgs,这是一种有限记忆拟牛顿优化方法。“正态”表示使用正态方程作为线性回归问题的解析解。默认值为“自动”,这意味着自动选择解算器算法


对我来说,这看起来值得一份关于。

Hi@SpiritusPrana的bug报告,谢谢你的评论。我知道每个解算器都在做什么(保存自动,这在定义上是模糊的),但你是说你认为我需要发布到SparkR Jira董事会,将此作为一个问题提出来?在你打开一个问题之前,请用你尝试过的spark版本更新你的问题,好吗?因此,我们可以重现errorHi@kathystehl-是的-我认为您的代码格式良好,并且与API文档一致。因为它的行为并不一致,所以作为一个bug值得研究。也许值得等待一段时间,看看Eliasah是否会回来提供建议。作为一个没有Apache项目经验的R用户,我对记录SparkR错误感到有点害怕,但我发现开发人员支持并愿意接受措辞清晰的错误报告。感谢您的评论@SpiritusPrana!是的,我同意。另外,Spark 2.0.0(希望)即将面世,所以我的问题可能会在我升级到最新版本后得到解决。afaik为glm使用bfgs解算器的唯一方法是使用SparkR中没有调用的
optim()
。您使用的Spark是哪个版本?@eliasah,我已经用我正在使用的Spark版本更新了我的帖子。谢谢你的反馈!
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")