我使用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
中切断了答案 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曲线绘制的垂直线)来构造该点。