【问题标题】:Find the best pipeline model using CrossValidator and ParamGridBuilder使用 CrossValidator 和 ParamGridBuilder 找到最佳管道模型
【发布时间】:2018-11-02 19:14:42
【问题描述】:

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

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

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

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

实际示例:

    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

需要:

    from pyspark.ml.tuning import CrossValidator, ParamGridBuilder

    dt2 = DecisionTreeRegressor()
    dt2.setPredictionCol("Predicted_PE")
    dt2.setMaxBins(100)
    dt2.setFeaturesCol("features")
    dt2.setLabelCol("PE")
    dt2.setMaxDepth(10)

    pipeline2 = Pipeline(stages=[vectorizer, dt2])
    model2 = pipeline2.fit(trainingSetDF)
    regEval2 = RegressionEvaluator(predictionCol = "Predicted_PE", labelCol = "PE", metricName = "rmse")

    paramGrid = ParamGridBuilder().build() # ??????
    crossval = CrossValidator(estimator = pipeline2, estimatorParamMaps = paramGrid, evaluator=regEval2, numFolds = 5) # ?????

    rmse2 = regEval2.evaluate(predictions)

    #bestPipeline = ????
    #bestLRModel = ????
    #bestParams = ????

    print("Root Mean Squared Error: %.2f" % rmse2)
    (1) Spark Jobs 
    (2) Root Mean Squared Error: 3.60     # the same ¿?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-07-05
      • 2019-12-17
      • 2020-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2014-12-02
      • 2021-09-02
      相关资源
      最近更新 更多