使用管道模型评估我的预测
Evaluate my forecast using a Pipeline Model
下面有部分代码;我想知道如何评估我的预测?
如果,我想知道我的功能的重要性,是否有使用 RandomForestRegressionModel ? Should I directly switch to a RandomForestRegressionModel and not using a PipelineModel 的 featureImportances 的技巧?
我读到使用管道可以提供更好的结果,这就是我使用它的原因。
我尝试使用 RegressionEvaluator 但我没有得到我想要的。
或者我应该简单地考虑一下,将我的 DataFrame 转换为 RDD,然后使用 RegressionMetrics 来获得均方误差。
总而言之,我只需要知道评估我的预测的最佳方法是什么。
val assembler = new VectorAssembler()
.setInputCols(Array("customers", "year", "month", "dayOfMonth", "dayOfWeek", "weekOfYear", "dayOfYear"))
.setOutputCol("features")
val limitDate = "2017-04-01"
val trainingData = DF_2.filter(DF_2("time").lt(lit(limitDate)))
//trainingData.printSchema()
val rf = new RandomForestRegressor()
.setNumTrees(60)
.setMaxDepth(25)
.setMaxBins(100)
.setLabelCol("amount")
.setFeaturesCol("features")
val pipeline = new Pipeline().setStages(Array(assembler, rf))
//Train the model
val model = pipeline.fit(trainingData)
//Make predictions
val predictions = model.transform(DF_2)
对于那些需要答案的人;在这里我该如何处理这个问题。
您可以 "transform"/"cast" 您的管道模型到您需要的类型,使用 asInstanceOf 像这样:
val pipeline = new Pipeline().setStages(Array(assembler, rf))
val newModel = model.stages("NumberStage").asInstanceOf[TheModelYouWant]
将 NumberStage 更改为您的算法在您的管道中的索引,在我的管道中它是 1。(对于 rf)
将 TheModelYouWant 更改为您需要的模型类型,在我的例子中是 RandomForestRegressionModel。
然后您可以创建自己的 Evaluator 并用于您的模型。
如果你想在 RDD[(Double, Double)] 中转换你的 DF,你可以使用 .rdd & .map :
val predictionsAndLabels= df.select("amount", "prediction").rdd.map {case (row) => ((row.getInt(0).toDouble), (row.getDouble(1)))}
我现在有一个 RDD[(Double, Double)],你可以将它用于 RegressionMetrics。
我希望它能帮助别人。
下面有部分代码;我想知道如何评估我的预测? 如果,我想知道我的功能的重要性,是否有使用 RandomForestRegressionModel ? Should I directly switch to a RandomForestRegressionModel and not using a PipelineModel 的 featureImportances 的技巧?
我读到使用管道可以提供更好的结果,这就是我使用它的原因。 我尝试使用 RegressionEvaluator 但我没有得到我想要的。
或者我应该简单地考虑一下,将我的 DataFrame 转换为 RDD,然后使用 RegressionMetrics 来获得均方误差。
总而言之,我只需要知道评估我的预测的最佳方法是什么。
val assembler = new VectorAssembler()
.setInputCols(Array("customers", "year", "month", "dayOfMonth", "dayOfWeek", "weekOfYear", "dayOfYear"))
.setOutputCol("features")
val limitDate = "2017-04-01"
val trainingData = DF_2.filter(DF_2("time").lt(lit(limitDate)))
//trainingData.printSchema()
val rf = new RandomForestRegressor()
.setNumTrees(60)
.setMaxDepth(25)
.setMaxBins(100)
.setLabelCol("amount")
.setFeaturesCol("features")
val pipeline = new Pipeline().setStages(Array(assembler, rf))
//Train the model
val model = pipeline.fit(trainingData)
//Make predictions
val predictions = model.transform(DF_2)
对于那些需要答案的人;在这里我该如何处理这个问题。
您可以 "transform"/"cast" 您的管道模型到您需要的类型,使用 asInstanceOf 像这样:
val pipeline = new Pipeline().setStages(Array(assembler, rf))
val newModel = model.stages("NumberStage").asInstanceOf[TheModelYouWant]
将 NumberStage 更改为您的算法在您的管道中的索引,在我的管道中它是 1。(对于 rf)
将 TheModelYouWant 更改为您需要的模型类型,在我的例子中是 RandomForestRegressionModel。
然后您可以创建自己的 Evaluator 并用于您的模型。
如果你想在 RDD[(Double, Double)] 中转换你的 DF,你可以使用 .rdd & .map :
val predictionsAndLabels= df.select("amount", "prediction").rdd.map {case (row) => ((row.getInt(0).toDouble), (row.getDouble(1)))}
我现在有一个 RDD[(Double, Double)],你可以将它用于 RegressionMetrics。 我希望它能帮助别人。