2017-07-25 67 views
1

有下面的代碼的一部分,我的預測;我想知道如何評估我的預測? 如果,我想知道我的特徵的重要性是有使用featureImportances的RandomForestRegressionModel一招?我應該直接切換到RandomForestRegressionModel而不是使用PipelineModel評估使用管道型號

,我讀了使用管道可以提供更好的結果,這就是爲什麼我使用它。 我試過使用RegressionEvaluator但我沒有得到我想要的。

還是應該我只是覺得簡單,我的數據幀轉換爲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

對於那些需要一個答案;我在這裏如何處理這個問題。

可以「改造」 /「投」的管道模式到u需要使用asInstanceOf這樣類型:

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

變化NumberStage與算法在你的管道的指數,在我管道是1.(RF)

變化TheModelYouWant您需要的模型的類型,在我的情況下,它是RandomForestRegressionModel。

然後你就可以創建自己的Evaluator要使用的模型。

如果你想改變你的DF在RDD [(雙人間,雙人間),u可以使用.rdd & .MAP:

val predictionsAndLabels= df.select("amount", "prediction").rdd.map {case (row) => ((row.getInt(0).toDouble), (row.getDouble(1)))} 

我現在有一個RDD [(雙人間,雙人間)]您可以將其用於RegressionMetrics。 我希望它能幫助別人。