首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用管道模型评估我的预测

用管道模型评估我的预测
EN

Stack Overflow用户
提问于 2017-07-25 15:07:43
回答 1查看 178关注 0票数 2

下面是代码的一部分;我想知道如何评估我的预测?如果,我想知道我的特性的重要性,是否有一个使用featureImportances of RandomForestRegressionModel的诀窍?我应该直接切换到RandomForestRegressionModel而不是使用PipelineModel吗?

我读到,使用管道可以产生更好的效果,这就是我使用管道的原因。我试过使用RegressionEvaluator,但我没有得到我想要的。

或者,我应该简单地考虑并将我的DataFrame转换为RDD,并使用RegressionMetrics来获得均方误差。

总之,我只需要知道什么是最好的方法来评估我的预测。

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-28 10:02:03

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

您可以将管道模型“转换”/“强制转换”到需要使用asInstanceOf的类型,如下所示:

代码语言:javascript
复制
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:

代码语言:javascript
复制
val predictionsAndLabels= df.select("amount", "prediction").rdd.map {case (row) => ((row.getInt(0).toDouble), (row.getDouble(1)))}

我现在有一个RDD(双,双),您可以将它用于RegressionMetrics。我希望它能对某人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45307186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档