R -MLR积极阶级改变了

  • 本文关键字:改变 -MLR r mlr
  • 更新时间 :
  • 英文 :


我正在使用R MLR软件包,因为它允许我使用多个分类方法和调整参数,并在此软件包中使用相同的方法。

,但它改变了我的积极班级。

在我的数据集中,我需要预测" haswriteoff",它具有值" 1"或" 2"。" 1"是多数级别,远远超过" 2"的数量,这意味着班级是不平衡的。我将正类别设置为makeClassifTask函数中的" 2",但是在预测之后,当我检查混乱矩阵时,它显示为" 1"。

这是我的代码:

我在这里设置了正类别

train_task <- makeClassifTask(data=data.frame(train_data), target = "HasWriteOff", positive = "2")
test_task <- makeClassifTask(data=data.frame(test_data), target = "HasWriteOff", positive = "2")

训练并用XGBoost

进行预测
set.seed(410)
getParamSet("classif.xgboost")
xg_learner <- makeLearner("classif.xgboost", predict.type = "response")
xg_learner$par.vals <- list(
  objective = "binary:logistic",
  eval_metric = "error",
  nrounds = 250
)
xg_param <- makeParamSet(
  makeIntegerParam("nrounds",lower=200,upper=600),
  makeIntegerParam("max_depth",lower=3,upper=20),
  makeNumericParam("lambda",lower=0.55,upper=0.60),
  makeNumericParam("eta", lower = 0.001, upper = 0.5),
  makeNumericParam("subsample", lower = 0.10, upper = 0.80),
  makeNumericParam("min_child_weight",lower=1,upper=5),
  makeNumericParam("colsample_bytree",lower = 0.2,upper = 0.8)
)
rancontrol <- makeTuneControlRandom(maxit = 100L)
cv_xg <- makeResampleDesc("CV",iters = 3L)
xg_tune <- tuneParams(learner = xg_learner, task = train_task, resampling = cv_xg,measures = acc,par.set = xg_param, control = rancontrol)
xg_final <- setHyperPars(learner = xg_learner, par.vals = xg_tune$x)
xgmodel <- mlr::train(xg_final, train_task)
xgpredict <- predict(xgmodel, test_task)

在此处检查混乱矩阵

nb_prediction <- xgpredict$data$response
dCM <- confusionMatrix(test_data$HasWriteOff, nb_prediction)
dCM

输出

准确性:0.9954
95%CI:(0.9916,0.9978) 没有信息率:0.9784
p-value [acc> nir]:5.136e-11
Kappa:0.8913
麦克尼玛的测试p值:1
灵敏度:0.9977
特异性:0.8936
pes pred值:0.9977
neg pred值:0.8936
患病率:0.9784
检测率:0.9761
检测率:0.9784
平衡精度:0.9456
'积极'级:1

您可以在这里看到"正'"类是1。

我检查了我在这里使用的其他方法,它们没有"正面"参数。

您知道如何真正将积极的班级设置为少数族裔" 2"?我正在尝试通过将少数族裔级设置为正类别,特异性可以更高?

哦,我刚刚发现,此方法还应更改正类dCM <- confusionMatrix(test_data$HasWriteOff, nb_prediction, positive = "2")

昨天我没有检查confusionMatrix功能,因为我认为正类别应由predict之前使用的那些方法定义

但是,仅检查了r文档,对于 confusionMatrix,参数 positive,它说:

如果只有两个因子水平,则第一级将用作"正"结果

所以昨天,无论我之前是否定义了积极的班级,它都会选择多数班级。

相关内容

  • 没有找到相关文章

最新更新