Spark实现了Scala api的并行交叉验证

Geo*_*ler 3 scala cross-validation apache-spark apache-spark-ml

Pyspark通过提供的可能性很大,以并行的模式交叉验证https://github.com/databricks/spark-sklearn 作为sklearn的简单替换GridSearchCV

from spark_sklearn import GridSearchCV
Run Code Online (Sandbox Code Playgroud)

如何为Spark的Scala实现类似的功能,CrossValidator即并行化每个折叠?

eli*_*sah 8

自火花2.3:

您可以使用创建或创建的setParallelism(n)方法来执行此操作CrossValidator.即:

cv.setParallelism(2) 
Run Code Online (Sandbox Code Playgroud)

要么

cv = CrossValidator(estimator=lr, estimatorParamMaps=grid, evaluator=evaluator, \ 
                    parallelism=2)  // Evaluate up to 2 parameter settings in parallel
Run Code Online (Sandbox Code Playgroud)

在火花2.3之前:

你不能在Spark Scala中做到这一点.您无法在Scala Spark中并行化交叉验证.

如果您已经阅读了spark-sklearn很好的文档,GridSearchCV是并行化的,但模型训练不是.因此,这在规模上是无用的.此外,由于着名的,您可以并行化Spark Scala API的交叉验证SPARK-5063:

RDD转换和操作只能由驱动程序调用,而不能在其他转换内部调用; 例如,rdd1.map(x => rdd2.values.count()*x)无效,因为无法在rdd1.map转换中执行值转换和计数操作.有关更多信息,请参阅SPARK-5063.

摘自README.md:

该软件包包含一些工具,可将Spark计算框架与流行的scikit-learn机器库集成.其他工具包括:

同时训练和评估多个scikit-learn模型.它是scikit-learn中默认包含的多核实现的分布式模拟.将Spark的Dataframes无缝转换为numpy ndarrays或稀疏矩阵.(实验性的)将Scipy的稀疏矩阵作为稀疏向量的数据集进行分配.它侧重于具有少量数据且可以并行运行的问题.

对于小数据集,它使用Spark分配搜索估计器参数(scikit-learn中的GridSearchCV),对于不适合内存的数据集,我们建议在Spark MLlib中使用分布式实现.

注意:此软件包分发简单的任务,如网格搜索交叉验证.它不会分发个人学习算法(与Spark MLlib不同).

  • 最新版本的spark对此功能有一些支持. (3认同)
  • 是的,这就是我的意思.可以在一个级别上启用并行性:模型选择或模型训练,而不是两者. (2认同)