【问题标题】:Evaluate my forecast using a Pipeline Model使用管道模型评估我的预测
【发布时间】:2017-12-31 14:37:36
【问题描述】:

下面有一部分代码;我想知道如何评估我的预测? 如果,我想知道我的功能的重要性,有没有使用 RandomForestRegressionModelfeatureImportances 的技巧?我应该直接切换到 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)

【问题讨论】:

    标签: apache scala apache-spark-mllib random-forest databricks


    【解决方案1】:

    对于那些需要答案的人;在这里我该如何处理这个问题。

    您可以像这样使用 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。 我希望它会帮助某人。

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 2016-08-08
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 2017-06-07
      • 2022-11-15
      • 2021-12-16
      • 1970-01-01
      相关资源
      最近更新 更多