XGBoost上的AUC指标

时间:2017-08-23 08:08:19

标签: r xgboost auc

我使用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

中切断了

3 个答案:

答案 0 :(得分:3)

您可以通过以下

查看训练数据集的训练模型的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对预测分数进行排序并查看在预测集中找到的目标事件的百分比。因此,如果移动截止点,它会检​​查您可以找到的目标事件百分比。截止点的决定与成本或算法的应用有关。您可以搜索截止值以获取更多信息。

答案 1 :(得分:0)

我编辑代码:

你可以直接使用confussion矩阵来实现:

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

答案 2 :(得分:0)

有多种方法可以找到一个好的临界阈值,还有不同的原因(例如,数据集中的类标签不平衡,或者因为您想调整特异性或敏感性)。

一个这样的例子是在一个分类器中,该分类器用于预测患者是否患有疾病的早期发作,假阳性的成本可能很高,因此最好保持较高的特异性,即使这意味着还有可能会降低灵敏度,并可能带来一些假阴性。

有多种方法可以从ROC曲线或精度/召回曲线构造此截止值。就我上面提到的情况(通常与遗传生物标记一起使用)而言,您可以使用Youdin指数(从“机会均等线”到ROC曲线绘制的垂直线)来构造该点。