有没有办法在没有参数网格的情况下使用 spark MLLib CrossValidator?

Posted

技术标签:

【中文标题】有没有办法在没有参数网格的情况下使用 spark MLLib CrossValidator?【英文标题】:Is there a way to use spark MLLib CrossValidator without parameter grid? 【发布时间】:2021-11-07 21:57:43 【问题描述】:

我想使用交叉验证而不是正常的验证集方法来更好地估计测试错误率。我正在使用基于 spark-MLLib Dataframe 的 API。但是,如果我运行以下代码 -

cv = tuning.CrossValidator(estimator=randomForestRegressor, evaluator=evaluator, numFolds=5)
cv_model = cv.fit(vsdf)

我得到了错误 -

KeyError                                  Traceback (most recent call last)
<ipython-input-44-d4e7a9d3602e> in <module>
----> 1 cv_model = cv.fit(vsdf)

C:\Spark\spark-3.1.2-bin-hadoop3.2\python\pyspark\ml\base.py in fit(self, dataset, params)
    159                 return self.copy(params)._fit(dataset)
    160             else:
--> 161                 return self._fit(dataset)
    162         else:
    163             raise ValueError("Params must be either a param map or a list/tuple of param maps, "

C:\Spark\spark-3.1.2-bin-hadoop3.2\python\pyspark\ml\tuning.py in _fit(self, dataset)
    667     def _fit(self, dataset):
    668         est = self.getOrDefault(self.estimator)
--> 669         epm = self.getOrDefault(self.estimatorParamMaps)
    670         numModels = len(epm)
    671         eva = self.getOrDefault(self.evaluator)

C:\Spark\spark-3.1.2-bin-hadoop3.2\python\pyspark\ml\param\__init__.py in getOrDefault(self, param)
    344             return self._paramMap[param]
    345         else:
--> 346             return self._defaultParamMap[param]
    347 
    348     def extractParamMap(self, extra=None):

KeyError: Param(parent='CrossValidator_a9121a59fda3', name='estimatorParamMaps', doc='estimator param maps')

我猜这是因为我没有提供任何参数映射来搜索。没有参数网格就没有办法在spark-ml中做交叉验证吗?

【问题讨论】:

【参考方案1】:

是的,你可以做到。不过,您需要传递一个空的参数网格。

这样的东西应该可以工作,它的行为就像一个普通的 K-fold 交叉验证器。

params_grid = ParamGridBuilder().build()

【讨论】:

以上是关于有没有办法在没有参数网格的情况下使用 spark MLLib CrossValidator?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 CodeIgniter *不*使用 ActiveRecord 的情况下将参数传递给查询?

有没有办法在不使用循环的情况下获得价值?

c#如何让DataGridView控件在没有绑定数据源的情况下显示网格线?

Spark结构化流式kafka在没有模式的情况下转换JSON(推断模式)

有没有办法重写 Spark RDD distinct 以使用 mapPartitions 而不是 distinct?

具有动态内容的 Flex 网格