pyspark - 如果不使用 spark-ml 中的管道,交叉验证会更快吗?
问题描述
假设我的特征工程有很多步骤:我的管道中有很多转换器。我想知道 Spark 在管道的交叉验证期间如何处理这些转换器:它们是否为每个折叠执行?在交叉验证模型之前应用转换器会更快吗?
以下哪个工作流程最快(或有更好的解决方案)?:
1.管道上的交叉验证器
transformer1 = ...
transformer2 = ...
transformer3 = ...
lr = LogisticRegression(...)
pipeline = Pipeline(stages=[transformer1, transformer2, transformer3, lr])
crossval = CrossValidator(estimator=pipeline, numFolds=10, ...)
cvModel = crossval.fit(training)
prediction = cvModel.transform(test)
2.流水线后交叉验证器
transformer1 = ...
transformer2 = ...
transformer3 = ...
pipeline = Pipeline(stages=[transformer1, transformer2, transformer3])
training_trans = pipeline.fit(training).transform(training)
lr = LogisticRegression(...)
crossval = CrossValidator(estimator=lr, numFolds=10, ...)
cvModel = crossval.fit(training_trans)
prediction = cvModel.transform(test)
最后,我对使用缓存有同样的问题:在2.我可以在进行交叉验证之前缓存 training_trans。在1.Cacher
我可以在 LogisticRegression 之前在管道中使用变压器。(请参阅在 Spark ML 管道中为 Cacher缓存中间结果)
解决方案
根据我最近参加的 spark.ml 培训 - 建议遵循这种方法:
cv = CrossValidator(estimator=lr,..)
pipelineModel = Pipeline(stages=[idx,assembler,cv])
cv_model= pipelineModel.fit(train)
希望这可以帮助!
推荐阅读
- powershell - 如何在 PowerShell 中替换 XML 值
- css - 图片未在 Shiny 应用程序中作为背景出现
- x86 - Intel 引脚修改指令地址
- java - 如何通过连接下划线(_)来获取 Json 值
- python - 编写 PowerShell 基准测试命令脚本
- flutter - Flutter - 在 MaterialApp 中覆盖 HeroController 可能吗?
- react-native - 反应原生渲染 foreach 循环
- python - tensowflow keras - model.predict 给出所有相同的输出
- bash - 通过 docker 无法 cd 进入现有目录的 bash 脚本
- python - 为什么 python 允许在不存在的索引处插入,但在访问时会抛出错误?