使用R中的预测函数从随机森林模型中获取预测时,我错误地将训练数据指定为新数据,如下所示:
RF1pred <- predict(RF1, newdata=TrainS1, type = "class")
像这样使用,我得到极高的准确度和AUC,我相信这是不对的,但我找不到一个好的解释。 This thread是我得到的最接近的,但我可以说我完全理解那里的解释。
如果有人可以详细说明,我将不胜感激。
谢谢!
编辑:重要的是要注意:如果我在没有完全指定数据集的情况下运行预测,我会得到合理的准确度和AUC,如下所示:
RF1pred <- predict(RF1, type = "class")
如果未明确指定新数据集,则不是用于预测的训练数据。因此,我不应该从两行代码中得到相同的结果吗?
EDIT2:这是一个包含随机数据的示例代码,用于说明这一点。在没有指定newdata的情况下进行预测时,AUC为0.4893。当明确指定newdata = train时,AUC为0.7125。
# Generate sample data
set.seed(15)
train <- data.frame(x1=sample(0:1, 100, replace=T), x2=rpois(100,10), y=sample(0:1, 100, replace=T))
# Build random forest
library(randomForest)
model <- randomForest(x1 ~ x2, data=train)
pred1 <- predict(model)
pred2 <- predict(model, newdata = train)
# Calculate AUC
library(ROCR)
ROCRpred1 <- prediction(pred1, train$x1)
AUC <- as.numeric(performance(ROCRpred1, "auc")@y.values)
AUC # 0.4893
ROCRpred2 <- prediction(pred2, train$x1)
AUC <- as.numeric(performance(ROCRpred2, "auc")@y.values)
AUC # 0.7125
答案 0 :(得分:1)
如果您查看predict.randomForest
的文档,将会发现如果不提供新的数据集,您将获得模型的现成(OOB)性能。由于OOB的性能理论上与模型在不同数据集上的性能有关,因此结果将更加真实(尽管仍不能替代真实的,独立收集的验证集)。