下面是部分代码;我想知道如何评估我的预测? 如果,我想知道我的功能的重要性是否有使用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)
答案 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。 我希望它能帮助别人。