我使用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
河童:0.8913
McNemar檢驗P值:1
靈敏度:0.9977
特異性:0.8936
名次潑尼鬆值:0.9977
負片潑尼鬆值:0.8936
患病率:0.9784
檢測率:0.9761
檢測患病率:0.9784
平衡精度:0.9456
'正' 級:1
正如你可以在這裏看到「積極」級爲1
我有檢查編輯我在這裏使用的其他方法,他們沒有「積極」的參數設置。
你知道我怎樣才能真正把積極的班級設定爲少數班級「2」? 我試圖看看是否通過設置少數類爲正類,特異性可以更高?
這聽起來像一個錯誤。你能提供一個完整的可重複的例子嗎? –