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



下面有一部分代码;我想知道如何评估我的预测? 如果,我想知道我的特征的重要性,是否有一个技巧可以使用特征随机森林回归模型的重要性?我应该直接切换到随机森林回归模型而不使用管道模型吗?

我读到使用管道可以提供更好的结果,这就是我使用它的原因。 我尝试使用回归评估器,但我没有得到我想要的。

或者我应该简单地思考并将我的数据帧转换为RDD,并使用回归指标来获得平均平方误差。

总而言之,我只需要知道评估我的预测的最佳方法是什么。

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)

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

您可以使用asInstanceOf将管道模型"转换"/"强制转换"为所需的类型,如下所示:

val pipeline = new Pipeline().setStages(Array(assembler, rf))
val newModel = model.stages("NumberStage").asInstanceOf[TheModelYouWant]

使用管道中算法的索引更改数字阶段,在我的管道中它是 1。(对于射频(

更改模型你想要的模型类型,在我的例子中是随机森林回归模型

然后,您可以创建自己的要用于模型的赋值器。

如果你想在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。 我希望它能帮助某人。

最新更新