mah*_*ngh 5 pipeline cross-validation apache-spark apache-spark-ml apache-spark-mllib
管道外部的交叉验证。
val naivebayes
val indexer
val pipeLine = new Pipeline().setStages(Array(indexer, naiveBayes))
val paramGrid = new ParamGridBuilder()
.addGrid(naiveBayes.smoothing, Array(1.0, 0.1, 0.3, 0.5))
.build()
val crossValidator = new CrossValidator().setEstimator(pipeLine)
.setEvaluator(new MulticlassClassificationEvaluator)
.setNumFolds(2).setEstimatorParamMaps(paramGrid)
val crossValidatorModel = crossValidator.fit(trainData)
val predictions = crossValidatorModel.transform(testData)
Run Code Online (Sandbox Code Playgroud)
管道内的交叉验证
val naivebayes
val indexer
// param grid for multiple parameter
val paramGrid = new ParamGridBuilder()
.addGrid(naiveBayes.smoothing, Array(0.35, 0.1, 0.2, 0.3, 0.5))
.build()
// validator for naive bayes
val crossValidator = new CrossValidator().setEstimator(naiveBayes)
.setEvaluator(new MulticlassClassificationEvaluator)
.setNumFolds(2).setEstimatorParamMaps(paramGrid)
// pipeline to execute compound transformation
val pipeLine = new Pipeline().setStages(Array(indexer, crossValidator))
// pipeline model
val pipeLineModel = pipeLine.fit(trainData)
// transform data
val predictions = pipeLineModel.transform(testData)
Run Code Online (Sandbox Code Playgroud)
所以我想知道哪种方式更好以及它的优缺点。
对于这两个函数,我得到了相同的结果和准确性。即使是第二种方法也比第一种方法快一点。
小智 0
根据我参加的培训 - 这应该是最佳实践:
cv = CrossValidator(estimator=lr,..)
pipelineModel = Pipeline(stages=[idx,assembler,cv])
cv_model= pipelineModel.fit(train)
Run Code Online (Sandbox Code Playgroud)
这样,您的管道将只适合一次,而不是每次使用 param_grid 重复运行,这使得它运行得更快。希望这可以帮助!
| 归档时间: |
|
| 查看次数: |
714 次 |
| 最近记录: |