2017-07-25 8 views
1

以下のコードの一部があります。予測をどのように評価することができますか? の機能を使用するには、自分の機能の重要性を知りたい場合は、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) 

答えて

0

回答が必要な方は、ここで私はこの問題にどのように対処しますか?

あなたはuは、このようasInstanceOfを使用して必要なタイプのおパイプラインモデルを「キャスト」/「変換」することができます

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

変更NumberStageあなたのパイプラインで、あなたのアルゴリズムの指標で、私の中でパイプラインは1でした。(rfの場合)

ModerYouWant必要なモデルのタイプについては、私の場合はRandomForestRegressionModelでした。

次に、ご自分のモデルに使用したい独自のEvaluatorを作成することができます。

あなたはRDD [(ダブル、ダブル)]であなたのDFを変換したい場合は、uが& .MAP .rdd使用することができます。

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

を私は今、RDD [(ダブル、ダブル)]を持っていますRegressionMetricsに使用できます。 私はそれが誰かを助けることを願っています。

関連する問題