r语言 - 两种不同的方法来计算随机森林上训练集的AUC,给了我不同的结果



我使用了两种方法来计算随机森林上训练集的AUC,但我得到了非常不同的结果。两种方式如下:

rfmodel <- randomForest(y~., data=train, importance=TRUE, ntree=1000)

计算列车组AUC的方式1:

`rf_p_train <- predict(rfmodel, type="prob",newdata = train)[,'yes']  
 rf_pr_train <- prediction(rf_p_train, train$y)  
 r_auc_train[i] <- performance(rf_pr_train, measure = "auc")@y.values[[1]] `

计算列车组AUC的方法2:
rf_p_train <- as.vector(rfmodel$votes[,2]) rf_pr_train <- prediction(rf_p_train, train$y) r_auc_train[i] <- performance(rf_pr_train, measure = "auc")@y.values[[1]]

方式 1 给我的 AUC 大约为 1,但方式 2 给我的 AUC 大约为 0.65。我想知道为什么这两个结果差异如此之大。谁能帮我解决这个问题?真的很感激。对于数据,很抱歉不允许我在这里分享。这是我第一次在这里提问。如果有什么不清楚的地方,请原谅我。多谢!

好的。第二种方式是正确的。为什么?因为在第一种方式中,您将training数据视为新数据集并尝试再次拟合它。第二种方式,你得到的实际上是所谓的out of bag估计,这应该是计算AUC的方法。

我不确定您使用什么数据。最好提供一个可重现的示例,但我认为我能够拼凑一个

library(randomForest)
#install.packages("ModelMetrics")
library(ModelMetrics)
# prep training to binary outcome
train <- iris[iris$Species %in% c('virginica', 'versicolor'),]
train$Species <- droplevels(train$Species)
# build model
rfmodel <- randomForest(Species~., data=train, importance=TRUE, ntree=2)
# generate predictions
preds <- predict(rfmodel, type="prob",newdata = train)[,2]
# Calculate AUC
auc(train$Species, preds)
# Calculate LogLoss
logLoss(train$Species, preds)

最新更新