下面是代码的一部分;我想知道如何评估我的预测?如果,我想知道我的特性的重要性,是否有一个使用featureImportances of RandomForestRegressionModel的诀窍?我应该直接切换到RandomForestRegressionModel而不是使用PipelineModel吗?
我读到,使用管道可以产生更好的效果,这就是我使用管道的原因。我试过使用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)发布于 2017-07-28 10:02:03
对于那些需要答案的人,在这里我该如何处理这个问题。
您可以将管道模型“转换”/“强制转换”到需要使用asInstanceOf的类型,如下所示:
val pipeline = new Pipeline().setStages(Array(assembler, rf))
val newModel = model.stages("NumberStage").asInstanceOf[TheModelYouWant]在管道中用算法的索引更改NumberStage,在我的管道中是1。(对于rf)
根据您需要的模型类型更改TheModelYouWant,在我的示例中是RandomForestRegressionModel。
然后,您可以创建您自己的评价者,您想要用于您的模型。
如果您想在RDD(Double,Double)中转换您的DF,可以使用.rdd & .map:
val predictionsAndLabels= df.select("amount", "prediction").rdd.map {case (row) => ((row.getInt(0).toDouble), (row.getDouble(1)))}我现在有一个RDD(双,双),您可以将它用于RegressionMetrics。我希望它能对某人有所帮助。
https://stackoverflow.com/questions/45307186
复制相似问题