R mlr3 TaskClassif 'termlabels' должен быть вектором символов длиной не менее

avatar
Pizza-Fan
8 августа 2021 в 17:21
150
1
0

Я использую mlr3 для простой модели классификации. Но я встречаю ошибки с несколькими разными моделями, к которым дает доступ mlr3. Здесь я привожу один репрекс, чтобы проиллюстрировать проблему:

library(data.table)
library(mlr3extralearners)
library(mlr3)
library(mlr3learners)
library(mlr3tuning)
library(mlr3pipelines)
library(mlr3filters)

#Make example data
DT = data.table(target = c(0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),pred = c(0.05767878,0.05761652,0.06508700,0.06531820,0.07050699,0.07098812,0.07150984,0.07845767,0.07891081,0.07873572,0.08035471,0.08039300,0.08040480,0.08040480,0.08472619,0.08489135,0.08517742,0.08612768,0.08728675,0.08790671,0.08913434,0.08911522,0.09036788,0.09147726,0.09154964,0.09236259,0.09299088,0.09499589,0.09748171,0.09756818,0.09756818,0.09861013,0.10193147,0.10211796,0.10277547,0.10379659,0.10393602,0.10397469,0.10364373,0.10368016,0.10362235,0.10387504,0.10385431,0.10387288,0.10423139,0.10483475,0.10570517,0.10573617,0.10569312,0.10572714,0.10597040,0.10573924,0.10551367,0.10573499,0.10602269,0.10765947,0.10721005,0.10703524,0.10824609,0.10933141,0.10936178,0.10957693,0.10874663,0.10875077))
DT[, target := as.factor(target)] #Target Variable as factor is required

task <- TaskClassif$new(id='pizza', backend = DT, target = "target", positive = '1') 
#Select an algo and a filter
randF = lrn("classif.randomForest", predict_type = "prob")#
filter1 = mlr_pipeops$get("filter", filter = mlr3filters::FilterVariance$new(),param_vals = list(filter.cutoff = 0.05))
#Construct a simple graph
graph = filter1 %>>% 
  PipeOpLearner$new(lrn("classif.randomForest"), id = "randF")
#graph$plot()
#Construct a learner and train it
learner = GraphLearner$new(graph)
learner$train(task)

Это дает ошибку: 'Ошибка переформулирования (атрибуты (условия) $term.labels): 'termlabels' должен быть вектором символов длиной не менее одного'

У меня такое впечатление, что задача-объект mlr3 как-то плохо взаимодействует с графом. Затем ошибка исходит от классификатора randomForest, но мне кажется, что данные не были переданы ему должным образом. Но это всего лишь моя теория. Я могу изменить вопрос, если он недостаточно ясен.

Источник
Lars Kotthoff
8 августа 2021 в 18:42
0

Похоже, ваш фильтр удаляет единственную функцию. В любом случае вам не нужна фильтрация функций только с одной функцией.

Pizza-Fan
9 августа 2021 в 17:33
0

@LarsKotthoff, ты спас меня. Может быть, это было бы хорошей функцией для mlr3 с предложением в сообщении об ошибке, что, возможно, предикторы были отфильтрованы.

Ответы (1)

avatar
Lars Kotthoff
9 августа 2021 в 18:01
0

Ваш фильтр удаляет единственную функцию, и фильтрация функций не требуется, если есть только одна функция.