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% CI : (0.9916, 0.9978) 無情報率 : 0.9784
P 値 [Acc > NIR] : 5.136e-11
カッパ : 0.8913
マクネマー検定 P 値 : 1
感度 : 0.9977 特異
度 : 0.8936
0.9977
Neg Pred 値: 0.8936
有病率: 0.9784
検出率: 0.9761
検出率: 0.9784
バランス精度: 0.9456
「陽性」クラス: 1
ここでわかるように、「ポジティブ」クラスは 1 です。
ここで使用している他の方法を確認しましたが、設定する「正の」パラメーターがありません。
ポジティブクラスをマイノリティクラス「2」として本当に設定する方法を知っていますか? 少数派クラスをポジティブクラスに設定することで、特異度が高くなるかどうかを確認しようとしていますか?