I am trying to measure performance of multilabel classification for some MLR classifiers using cross validation
I tried to use MLR resample
method or pass my own subset, however in both situations an error gets thrown (from what I have found out it happens when subset used for training contains only single values for some label)
Below is a small example where this problem occurs:
learner = mlr::makeLearner("classif.logreg")
learner = makeMultilabelClassifierChainsWrapper(learner)
data = data.frame(
attr1 = c(1, 2, 2, 1, 2, 1, 2),
attr2 = c(2, 1, 2, 2, 1, 2, 1),
lab1 = c(FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE),
lab2 = c(FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE))
task = mlr::makeMultilabelTask(data=data, target=c('lab1', 'lab2'))
here are two ways two get an error:
1.
rDesc = makeResampleDesc("CV", iters = 3)
resample(learner, task, rDesc)
2.
model = mlr::train(learner, task, subset=c(TRUE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE))
The error message:
Error in checkLearnerBeforeTrain(task, learner, weights): Task 'lab1' is a one-class-problem, but learner 'classif.logreg' does not support that!