使用管道模型评估我的预测

Evaluate my forecast using a Pipeline Model

下面有部分代码;我想知道如何评估我的预测? 如果,我想知道我的功能的重要性,是否有使用 RandomForestRegressionModel ? Should I directly switch to a RandomForestRegressionModel and not using a PipelineModelfeatureImportances 的技巧?

我读到使用管道可以提供更好的结果,这就是我使用它的原因。 我尝试使用 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。 我希望它能帮助别人。