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

时间:2017-07-25 15:07:43

标签: apache scala apache-spark-mllib random-forest databricks

下面是部分代码;我想知道如何评估我的预测? 如果,我想知道我的功能的重要性是否有使用RandomForestRegressionModel featureImportances 的技巧?我应该直接切换到RandomForestRegressionModel而不使用PipelineModel吗?

我读到使用Pipeline可以提供更好的结果,这就是我使用它的原因。 我尝试使用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)

1 个答案:

答案 0 :(得分:0)

对于那些需要答案的人;这里我该如何处理这个问题。

你可以"转换" /"演员"您的管道模型使用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。 我希望它能帮助别人。