R - mlr阳性等级发生变化

时间:2016-11-23 22:55:36

标签: r mlr

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

但它改变了我的积极等级。

在我的数据集中,我需要预测“HasWriteOff”,它的值为“1”或“2”。 “1”是多数阶级,远远超过“2”的数量,这意味着阶级是不平衡的。 我在makeClassifTask函数中将Positive类设置为“2”,但在预测之后,当我检查混淆矩阵时,它将Positive Class显示为“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值[Acc> NIR]:5.136e-11
                    Kappa:0.8913
   Mcnemar的测试P值:1
              灵敏度:0.9977
              特异性:0.8936
           Pos Pred价值:0.9977
           Neg Pred值:0.8936
               患病率:0.9784
           检测率:0.9761
     检测流行率:0.9784
        平衡准确度:0.9456
         '正面'等级:1

正如你在这里看到的'肯定'等级是1。

我已经检查了我在这里使用的其他方法,他们没有设置'正'参数。

你知道我怎么能把积极的阶级设为少数民族阶级“2”? 我试图看看是否通过将少数类设置为正类,特异性可以更高?

1 个答案:

答案 0 :(得分:0)

哦,我刚刚发现,这个方法也应该改变正面的dCM <- confusionMatrix(test_data$HasWriteOff, nb_prediction, positive = "2")

昨天我没有检查confusionMatrix函数,因为我认为正面类应该由predict之前使用的那些方法定义。

但是,只检查了R confusionMatrix参数positive的R文档,它说:

  

如果只有两个因子级别,则第一级将用作“肯定”结果

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