在 R 中将 predict() 与 randomForest 一起使用时出错

Posted

技术标签:

【中文标题】在 R 中将 predict() 与 randomForest 一起使用时出错【英文标题】:Error when using predict() with randomForest in R 【发布时间】:2013-11-27 22:53:29 【问题描述】:

我正在尝试使用 randomForest 中的 predict() 函数来预测四种数据缺乏物种的类别。我在原始数据上运行 RF 并创建了一个 RF 对象,然后我想用它来预测新数据的类别。

我使用的代码是:

# original data set "procellminvar" 
# DD sp only "procelldd"

#run RF on original data set

    procellminvar$current.red.list<-factor(procellminvar$current.red.list)
    procell6<-procellminvar[,6:80]
    procell6.imputed<-rfImpute(current.red.list~.,procell6)
    procellminvar.rf<-randomForest(current.red.list~., procell6.imputed, votes=true, importance=TRUE, ntree=1000)
    round(importance(procellminvar.rf),2)

#run prediction using original data and new data (DD sp only)

    predict(procellminvar.rf, procelldd)

RF 运行良好,但是当我尝试运行 predict 时,我收到一条错误消息:

predict(procellminvar.rf, procelldd)
# Error in eval(expr, envir, enclos) : object 'subpop' not found

我不明白为什么。有人可以简单地向我解释我在这里做错了什么吗?

【问题讨论】:

R 可能会告诉您procelldd 没有名为subpop 的变量。您的新数据框必须包含原始 rf 调用中使用的每个变量。 (在这种情况下,procell6.imputed 中的所有内容。) 谢谢。新数据框中的所有变量都是一样的,唯一不同的是数据。在 procell6.imputed 我指定变量 6:80,但显然我没有新数据 - 这不会有影响吗?如果是这样,我将如何解决它? 变量 subpop 不在 procelldd 中。这就是问题所在。 好的,我知道发生了什么——列中没有数据的所有变量都不存在,所以 procelldd 现在有 73 个而不是 80 个变量。数据不存在,因为它们是数据缺乏的物种。有没有办法防止在将数据读入 R 时删除这些列?或者它们是否必须具有价值(如果是这种情况,我不确定我是否会绕过它)。 无论如何在这种情况下都没有关系。如果缺少某些所需的变量(即 NA),则 randomForest 不会生成预测。您要么需要不同的模型,要么需要不同的数据(估算的、不同的子集……),或者两者都需要。 【参考方案1】:

我认为问题在于您在完整数据集上运行预测,但您没有在训练中使用完整数据集。您也没有使用原始变量。因此,您需要确保您在训练中使用的每个变量也存在于测试数据中。

【讨论】:

以上是关于在 R 中将 predict() 与 randomForest 一起使用时出错的主要内容,如果未能解决你的问题,请参考以下文章

在 R 中使用插入符号进行分类的 predict(model) 和 predict(model$finalModel) 之间的区别

MATLAB predict函数的结果

使用 cross_val_predict 与 cross_val_score 时,scikit-learn 的分数不同

R语言中的fitted() 和 predict()

R中连续randomForest.predict调用的结果不一致

帮助在 R 中对 kernlab 的 SVM 使用 predict()?