R - млр положительный класс изменился

Я использую пакет R mlr, потому что он позволяет мне использовать несколько методов классификации и настройки параметров, используя те же методы в этом пакете.

Но это изменило мой позитивный класс.

В моем наборе данных мне нужно предсказать "HasWriteOff", он имеет значение "1" или "2". "1" - это класс большинства, намного больше, чем число "2", что означает, что класс не сбалансирован. Я установил положительный класс как "2" в makeClassifTask функция, но после предсказания, когда я проверял матрицу путаницы, он показывает "Позитивный класс" как "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% ДИ: (0,9916, 0,9978) Нет информации. Скорость: 0,9784
P-значение [Acc > NIR]: 5.136e-11
Каппа: 0,8913
P-значение теста Макнемара: 1
Чувствительность: 0.9977
Специфичность: 0,8936
Pos Pred Value: 0,9977
Neg Pred Value: 0,8936
Распространенность: 0,9784
Частота обнаружения: 0,9761
Распространенность обнаружения: 0,9784
Сбалансированная точность: 0,9456
"Позитивный" класс: 1

Как видите, "Позитивный" класс - 1.

Я проверил другие методы, которые я использую здесь, у них нет "положительного" параметра для установки.

Вы знаете, как я могу действительно установить положительный класс как класс меньшинства "2"? Я пытаюсь понять, может ли специфика может быть выше, если установить класс меньшинства в качестве позитивного класса?

1 ответ

Решение

О, я только что обнаружил, что этот метод должен также изменить положительный класс dCM <- confusionMatrix(test_data$HasWriteOff, nb_prediction, positive = "2")

Вчера не проверял confusionMatrix функция, потому что я думал, что положительный класс должен быть определен теми методами, которые использовались ранее predict,

Однако, только что проверил документ R, для confusionMatrixпараметр positive, это говорит:

Если есть только два факторных уровня, первый уровень будет использоваться как "положительный" результат

Поэтому вчера он просто выбрал класс большинства, независимо от того, определил ли я ранее положительный класс.

Другие вопросы по тегам