代码之家  ›  专栏  ›  技术社区  ›  annadai

在randomforest上计算训练集AUC的两种不同方法得到了不同的结果?

  •  0
  • annadai  · 技术社区  · 7 年前

    我使用了两种方法来计算随机森林上训练集的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]] `
    


    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 回复  |  直到 7 年前
        1
  •  0
  •   Bs He    6 年前

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

        2
  •  0
  •   JackStat    7 年前

    我不确定您使用的是什么数据。如果你能提供一个可复制的例子,那就最好了,但我想我能把它拼凑起来

    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)