Pyspark 线性回归梯度下降交叉验证

Posted

技术标签:

【中文标题】Pyspark 线性回归梯度下降交叉验证【英文标题】:Pyspark Linear Regression Gradient Descent CrossValidation 【发布时间】:2017-10-30 02:53:26 【问题描述】:

我正在尝试在 pyspark 中对 SGD 模型执行交叉验证,我正在使用来自 pyspark.mllib.regressionLinearRegressionWithSGDParamGridBuilderCrossValidator 两者都来自 pyspark.ml.tuning 库。

在从 Spark 网站关注 documentation 之后,我希望运行它会起作用

lr = LinearRegressionWithSGD()
pipeline=Pipeline(stages=[lr])

paramGrid = ParamGridBuilder()\
    .addGrid(lr.stepSize, Array(0.1, 0.01))\
    .build()

crossval = CrossValidator(estimator=pipeline,estimatorParamMaps= paramGrid,
                         evaluator=RegressionEvaluator(),
                         numFolds=10)  

但是LinearRegressionWithSGD() 没有stepSize 的属性(尝试过其他人也没有运气)。

我可以将 lr 设置为 LinearRegression,但我无法将 SGD 用于我的模型并进行交叉验证。

scala 中有 kFold 方法,但我不知道如何从 pyspark 访问它

【问题讨论】:

【参考方案1】:

您可以使用来自LinearRegressionWithSGD 的 step 参数来定义您的步长,但这将不允许您的代码工作,因为您正在混合不兼容的库。不幸的是,我不知道如何使用 SGD 优化与 ml 库进行交叉验证,我想了解自己,但您正在混合库 pyspark.ml 和 pyspark.mllib。具体来说,您不能将LinearRegressionWithSGD 与 pyspark.ml 库一起使用。你必须使用pyspark.ml.regression.LinearRegression。

好消息是您可以将pyspark.ml.regression.LinearRegression 的求解器属性设置为使用'gd'。因此,您可能可以将“gd”优化器的参数设置为 SGD,但我不确定求解器文档在哪里或如何设置求解器属性(例如批量大小)。 api 显示调用 Param() 的 LinearRegression 对象,但我不确定它是否使用 pyspark.mllib 优化器。如果有人知道如何设置求解器属性,则可以通过允许您使用 Pipeline、ParamGridBuilder 和 CrossValidation ml 包进行模型选择来回答您的问题,LinearRegression 利用 SGD 优化进行参数调整。

尊敬的, 谢恩

【讨论】:

以上是关于Pyspark 线性回归梯度下降交叉验证的主要内容,如果未能解决你的问题,请参考以下文章

三种梯度下降方法与代码实现

机器学习入门:线性回归及梯度下降

机器学习100天(十四):014 梯度下降算法求解线性回归

机器学习100天(十四):014 梯度下降算法求解线性回归

梯度下降法求解线性回归

机器学习算法(优化)之一:梯度下降算法随机梯度下降(应用于线性回归Logistic回归等等)