0

我很难理解如何构建 ROC 曲线,现在我得出的结论是,我可能没有正确创建模型。我在类属性“y_n”为 0 或 1 的数据集中运行随机森林模型。出于预测目的,我将数据集划分为 bank_training 和 bank_testing。这是我做的步骤:

bankrf <- randomForest(y_n~., data=bank_training, mtry=4, ntree=2,
                  keep.forest=TRUE, importance=TRUE)
bankrf.pred <- predict(bankrf, bank_testing, type='response',
                  predict.all=TRUE, norm.votes=TRUE)

到目前为止我所做的是否正确?创建的 bankrf.pred 对象是一个列表对象,具有 2 个名为:聚合和个体的类。我不明白这两个类名是从哪里来的?此外,当我运行时:

summary(bankrf.pred)
           Length Class  Mode     
aggregate  22606  factor numeric  
individual 45212  -none- character

这个总结是什么意思?数据集(训练和测试)分别为 22605 和 22606。如果有人可以向我解释发生了什么,我将不胜感激。我认为这一切都有问题。

当我尝试使用 ROCR 设计 ROC 曲线时,我使用以下代码:

library(ROCR)
pred <- prediction(bank_testing$y_n, bankrf.pred$c(0,1))

Error in is.data.frame(labels) : attempt to apply non-function

我尝试创建 ROC 曲线的方式只是一个错误,还是从 randomForest 开始?

4

2 回答 2

1

您尝试使用的函数的文档包括对其两个主要参数的描述:

预测 包含预测的向量、矩阵、列表或数据框。

标签 包含真实类标签的向量、矩阵、列表或数据框。必须具有与“预测”相同的维度。

您当前正在将变量传递y_npredictions参数,而在我看来,参数看起来像是胡说八道labels

预测将存储在随机森林模型的输出中。如 中?predict.randomForest所述,它将是一个包含两个组件的列表。aggregate将包含整个森林的预测值,而individual将包含每棵树的预测值。

所以你可能想做这样的事情:

predictions(bankrf.pred$aggregate, bank_testing$y_n)

看看它是如何工作的?预测值被传递给参数,而predictions“标签”或真实值被传递给labels参数。

于 2012-07-16T17:54:23.863 回答
0

如果您只是想获得预测的类,则应该删除predict.all=TRUE参数。predict通过使用predict.all=TRUE,您告诉函数保留所有树木的预测,而不是来自森林的预测。

于 2015-05-12T00:03:51.333 回答