2017-07-25 1 views
1

Es gibt einen Teil des Codes unten; Ich würde gerne wissen, wie ich meine Prognose bewerten kann? Wenn ich die Wichtigkeit meiner Funktion wissen möchte gibt es einen Trick, um die featureImportances von RandomForestRegressionModel zu verwenden? Sollte ich direkt zu einem RandomForestRegressionModel wechseln und keinen PipelineModel verwenden?Meine Prognose mit einem Pipeline-Modell auswerten

Ich habe gelesen, dass die Verwendung einer Pipeline bessere Ergebnisse liefern könnte, deshalb verwende ich es. Ich versuchte mit einer RegressionEvaluator, aber ich bekomme nicht, was ich will.

Oder sollte ich einfach denken und meinen DataFrame zu einem RDD konvertieren und den RegressionMetrics verwenden, um den mittleren quadratischen Fehler zu erhalten.

Zusammenfassend muss ich nur wissen, was die beste Methode ist, um meine Prognose zu bewerten.

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) 

Antwort

0

Für diejenigen, die eine Antwort benötigen; hier, wie gehe ich mit diesem Problem um.

Sie können "verwandeln"/"werfen" Ihre Pipeline Modell auf die Art, die u asInstanceOf wie diese verwenden müssen:

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

ändert NumberStag mit dem Index des Algorithmus in der Pipeline, in meinem Pipeline es war 1. (Für Rf)

Ändern TheModelYouWant für den Typ des Modells, das Sie benötigen, in meinem Fall war es RandomForestRegressionModel.

Dann können Sie Ihre eigene Evaluator erstellen, die Sie für Ihr Modell verwenden möchten.

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

Ich habe jetzt ein RDD [(Double, Double)]:

Wenn Sie Ihr DF in einer RDD [(Double, Double)] zu transformieren, u & .map verwenden .rdd können und Sie können es für RegressionMetrics verwenden. Ich hoffe, es wird jemandem helfen.