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
, это говорит:
Если есть только два факторных уровня, первый уровень будет использоваться как "положительный" результат
Поэтому вчера он просто выбрал класс большинства, независимо от того, определил ли я ранее положительный класс.