Найдите лучшую модель трубопровода, используя CrossValidator и ParamGridBuilder - PullRequest
0 голосов
/ 23 мая 2018

У меня есть приемлемая модель, но я хотел бы улучшить ее, настроив ее параметры в Spark ML Pipeline с помощью CrossValidator и ParamGridBuilder.

В качестве оценщика я разместу существующий конвейер.В ParamMaps я бы не знал что ставить, я этого не понимаю.В качестве оценщика я буду использовать уже созданный ранее RegressionEvaluator.

Я собираюсь сделать это 5 раз, со списком из 10 различных значений глубины в дереве.

Как выбратьи показать лучшую модель для самого низкого среднеквадратичного значения?

Фактический пример:

    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

NEED:

    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 ¿?

1 Ответ

0 голосов
/ 30 мая 2018

Вам нужно вызвать .fit () с вашими данными обучения для объекта crossval, чтобы создать модель cv.Это сделает перекрестную проверку.Тогда вы получите лучшую модель (в соответствии с вашей метрикой оценщика) из этого.Например,

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

...