使用CrossValidator和ParamGridBuilder找到最佳管道模型

时间:2018-05-23 17:42:16

标签: machine-learning pyspark pipeline cross-validation apache-spark-ml

我有一个可接受的模型,但我想通过使用CrossValidator和ParamGridBuilder在Spark ML Pipeline中调整其参数来改进它。

作为Estimator,我将放置现有的管道。 在ParamMaps我不知道该放什么,我不明白。 作为Evaluator,我将使用之前已创建的RegressionEvaluator。

我将要进行5次折叠,并在树中列出10个不同的深度值。

如何选择并显示最低RMSE的最佳模型?

ACTUAL示例:

$row[1]

需要:

    from pyspark.ml import Pipeline
    from pyspark.ml.regression import DecisionTreeRegressor
    from pyspark.ml.feature import VectorIndexer
    from pyspark.ml.evaluation import RegressionEvaluator

    dt = DecisionTreeRegressor()
    dt.setPredictionCol("Predicted_PE")
    dt.setMaxBins(100)
    dt.setFeaturesCol("features")
    dt.setLabelCol("PE")
    dt.setMaxDepth(8)

    pipeline = Pipeline(stages=[vectorizer, dt])
    model = pipeline.fit(trainingSetDF)
    regEval = RegressionEvaluator(predictionCol = "Predicted_XX", labelCol = "XX", metricName = "rmse")
    rmse = regEval.evaluate(predictions)

    print("Root Mean Squared Error: %.2f" % rmse)
    (1) Spark Jobs 
    (2) Root Mean Squared Error: 3.60

1 个答案:

答案 0 :(得分:0)

您需要使用crossval对象上的训练数据调用.fit()以创建cv模型。这将进行交叉验证。然后从中获得最佳模型(根据您的评估者指标)。例如

cvModel = crossval.fit(trainingData) myBestModel = cvModel.bestModel