【问题标题】:AUC metrics on XGBoostXGBoost 上的 AUC 指标
【发布时间】:2018-01-31 17:06:14
【问题描述】:

我使用 XGBoost 构建我的预测模型:

setDT(train)
setDT(test)

labels <- train$Goal
ts_label <- test$Goal
new_tr <- model.matrix(~.+0,data = train[,-c("Goal"),with=F]) 
new_ts <- model.matrix(~.+0,data = test[,-c("Goal"),with=F])

labels <- as.numeric(labels)-1
ts_label <- as.numeric(ts_label)-1

dtrain <- xgb.DMatrix(data = new_tr,label = labels) 
dtest <- xgb.DMatrix(data = new_ts,label=ts_label)

params <- list(booster = "gbtree", objective = "binary:logistic", eta=0.3, gamma=0, max_depth=6, min_child_weight=1, subsample=1, colsample_bytree=1)

xgb1 <- xgb.train(params = params, data = dtrain, nrounds = 291, watchlist = list(val=dtest,train=dtrain), print_every_n = 10, 
                   early_stop_round = 10, maximize = F , eval_metric = "error")


xgbpred <- predict(xgb1,dtest)
xgbpred <- ifelse(xgbpred > 0.5,1,0)

confusionMatrix(xgbpred, ts_label)

Confusion Matrix and Statistics

          Reference
Prediction    0    1
         0 1904   70
         1  191 2015

               Accuracy : 0.9376               
                 95% CI : (0.9298, 0.9447)     
    No Information Rate : 0.5012               
    P-Value [Acc > NIR] : < 0.00000000000000022

                  Kappa : 0.8751               
 Mcnemar's Test P-Value : 0.0000000000001104   

            Sensitivity : 0.9088               
            Specificity : 0.9664               
         Pos Pred Value : 0.9645               
         Neg Pred Value : 0.9134               
             Prevalence : 0.5012               
         Detection Rate : 0.4555               
   Detection Prevalence : 0.4722               
      Balanced Accuracy : 0.9376               

       'Positive' Class : 0   

这个精度适合我,但我想检查 auc 的度量。我写:

xgb1 <- xgb.train(params = params, data = dtrain, nrounds = 291, watchlist = list(val=dtest,train=dtrain), print_every_n = 10, 
                   early_stop_round = 10, maximize = F , eval_metric = "auc")  

但在那之后我不知道如何对 AUC 指标做出预测。我需要你的帮助,因为这是我第一次使用 XGBoost。谢谢。

UPD:据我了解,在 auc 指标之后,我需要一个系数,我将削减课程。现在我在 0,5 时切断

【问题讨论】:

  • 关于 AUC 的预测是什么意思? AUC 只是分类器的性能指标。如果您优化 w.r.t AUC 而不是准确性,您将拥有不同的功能,但无论如何它的输出将是相同的。也尝试使用 xgb1 进行预测..
  • @JanSila 我在拟合 auc 指标时得到 [291] val-auc:0.978914 train-auc:1.000000。但是,如果我像 xgb1 一样进行预测,值不会改变。与错误指标相同。

标签: r xgboost auc


【解决方案1】:

有不同的方法可以找到一个好的截止阈值以及您可能想要这样做的不同原因 - 例如,数据集中的类标签不平衡或者因为您想要调整特异性或敏感性。

其中一个示例是用于预测患者是否患有早期疾病的分类器,其中假阳性的成本可能相当高,因此最好保持高特异性,即使这意味着也有可能牺牲敏感性并可能产生一些假阴性。

从 ROC 曲线或从精度/召回曲线构建此截止值有不同的方法。在我刚才提到的情况下,通常与遗传生物标记一起使用,您可以使用 Youdin Index(从“均等机会线”到 ROC 曲线绘制的垂直线)来构建该点。

【讨论】:

    【解决方案2】:

    您可以通过以下方式查看训练数据集的训练模型的 AUC 值

    > max(xgb1$evaluation_log$train_auc)
    

    您还可以使用 pROC 包为您对测试集的预测计算它,如下所示

    > library(pROC) 
    > roc_test <- roc( test_label_vec, predictions_for_test, algorithm = 2) 
    

    对于使用参数编写的代码,它是

    > roc_test <- roc(ts_label, xgbpred, algorithm = 2)
    > plot(roc_test ) 
    > auc(roc_test )
    

    如果您想为您的训练集计算 AUC 并绘制 ROC 曲线,您可以使用以下方法

    > roc_training <- roc(train_output_vec, train_predictions, algorithm = 2)
    > plot(roc_training )   
    > auc(roc_training)
    

    ROC曲线和AUC不需要考虑截止点。正在绘制 ROC 并计算 AUC,对预测分数进行排序并查看在预测集中找到目标事件的百分比。因此,它正在检查如果您移动截止点,您可以找到多少百分比的目标事件。截止点的决定与成本或算法的应用有关。您可以搜索截止以获取更多信息。

    【讨论】:

      【解决方案3】:

      我编辑代码:

      你可以直接用混淆矩阵来做:

      cm<-confusionMatrix(xgbpred, ts_label)$table
      t = cm[1,1]/(cm[1,1]+cm[2,1])
      f = cm[2,2]/(cm[2,1]+cm[2,2])
      
      AUC = (1+t-f)/2
      

      【讨论】:

      • sry,它不起作用,cm [1, 1] 错误:测量次数错误
      • 你能做 ls(cm) 和 class(cm) 并告诉我结果吗??
      • > ls(cm) [1] "byClass" "dots" "mode" "overall" "positive" "table" > class(cm) [1] "confusionMatrix"
      • 这个AUC的解释是什么?这是一个我可以切断我的回应的coef吗?
      猜你喜欢
      • 2017-05-24
      • 2023-04-09
      • 2018-03-26
      • 2018-07-30
      • 1970-01-01
      • 2015-07-17
      • 2019-09-21
      • 2017-04-01
      • 2018-09-09
      相关资源
      最近更新 更多