首页 > 解决方案 > R mlr3 TaskClassif 'termlabels' 必须是长度至少为 1 的字符向量

问题描述

我将 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 分类器,但对我来说,数据似乎没有正确移交给它。但这只是我的一个理论。如果它不够清楚,我可能会改变这个问题。

标签: rbinaryclassificationmlr3

解决方案


您的过滤器正在删除唯一的功能,如果只有一个功能,则不需要功能过滤。


推荐阅读