使用 CrossValidator 和 ParamGridBuilder 找到最佳管道模型
Find the best pipeline model using CrossValidator and ParamGridBuilder
我有一个可接受的模型,但我想通过使用 CrossValidator 和 ParamGridBuilder 在 Spark ML Pipeline 中调整其参数来改进它。
作为估算员,我将放置现有管道。
在 ParamMaps 中我不知道该放什么,我不明白。
作为 Evaluator,我将使用之前创建的 RegressionEvaluator。
我打算做 5 次折叠,在树中列出 10 个不同的深度值。
我怎样才能 select 并显示最低 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 ¿?
您需要使用 crossval 对象上的训练数据调用 .fit() 来创建 cv 模型。这将进行交叉验证。然后你从中得到最好的模型(根据你的评估指标)。例如
cvModel = crossval.fit(trainingData)
myBestModel = cvModel.bestModel
我有一个可接受的模型,但我想通过使用 CrossValidator 和 ParamGridBuilder 在 Spark ML Pipeline 中调整其参数来改进它。
作为估算员,我将放置现有管道。 在 ParamMaps 中我不知道该放什么,我不明白。 作为 Evaluator,我将使用之前创建的 RegressionEvaluator。
我打算做 5 次折叠,在树中列出 10 个不同的深度值。
我怎样才能 select 并显示最低 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 ¿?
您需要使用 crossval 对象上的训练数据调用 .fit() 来创建 cv 模型。这将进行交叉验证。然后你从中得到最好的模型(根据你的评估指标)。例如
cvModel = crossval.fit(trainingData)
myBestModel = cvModel.bestModel