Pyspark 线性回归梯度下降交叉验证
Posted
技术标签:
【中文标题】Pyspark 线性回归梯度下降交叉验证【英文标题】:Pyspark Linear Regression Gradient Descent CrossValidation 【发布时间】:2017-10-30 02:53:26 【问题描述】:我正在尝试在 pyspark 中对 SGD 模型执行交叉验证,我正在使用来自 pyspark.mllib.regression
的 LinearRegressionWithSGD
、 ParamGridBuilder
和 CrossValidator
两者都来自 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 线性回归梯度下降交叉验证的主要内容,如果未能解决你的问题,请参考以下文章