我使用两种方法计算randomForest训练集的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。我想知道为什么这两个结果差别如此之大。任何人都可以帮我这个吗?真的很感激。对于数据,我很抱歉我不能在这里分享。这是我第一次在这里提问。如果有什么不清楚,请原谅我。非常感谢!
答案 0 :(得分:0)
我不确定您使用的数据。最好是你提供一个可重复的例子,但我想我能够把它拼凑起来
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)
答案 1 :(得分:0)
行。第二种方式是正确的。为什么?因为在第一种方式中,您将training
数据视为新数据集并尝试再次适合它。在第二种方式中,你得到的实际上是所谓的out of bag
估计,这应该是计算AUC的方法。