在 R 中进行随机森林预测时将训练数据指定为新数据的效果

The Effect of Specifying Training Data as New Data when Making Random Forest Predictions in R

在使用 R 中的预测函数从随机森林模型中获取预测时,我错误地将训练数据指定为新数据,如下所示:

RF1pred <- predict(RF1, newdata=TrainS1, type = "class")

这样使用,我得到了极高的准确率和 AUC,我确信这是不对的,但我找不到很好的解释。 This thread 是我得到的最接近的,但我不能说我完全理解那里的解释。

谁能详细说说,不胜感激

谢谢!

编辑:需要注意的重要事项:如果我 运行 在没有完全指定数据集的情况下进行预测,我将获得合理的准确性和 AUC,如下所示:

RF1pred <- predict(RF1, type = "class")

如果没有明确指定新的数据集,则训练数据不是用于预测。因此,我不应该从两行代码中得到相同的结果吗?

EDIT2:这是一个示例代码,其中包含说明这一点的随机数据。在未指定新数据的情况下进行预测时,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

如果您查看 predict.randomForest 的文档,您会发现如果不提供新数据集,您将获得模型的袋外 (OOB) 性能。由于 OOB 性能在理论上与您的模型在不同数据集上的性能相关,因此结果将更加真实(尽管仍然不能替代真实的、独立收集的验证集)。