计算随机森林训练集AUC的两种不同方法给出了不同的结果?

时间:2017-10-07 15:20:36

标签: r random-forest prediction auc

我使用两种方法计算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。我想知道为什么这两个结果差别如此之大。任何人都可以帮我这个吗?真的很感激。对于数据,我很抱歉我不能在这里分享。这是我第一次在这里提问。如果有什么不清楚,请原谅我。非常感谢!

2 个答案:

答案 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的方法。