警告“未知或未初始化的列:`ntree`”当尝试使用包 mlr 将超参数传递给学习器时

问题描述

问题

我想使用自制网格提供的不同超参数进行网格搜索。但是当我运行代码时,我收到一条警告:“未知或未初始化的列:ntree。”

示例数据

age <- c(round(rnorm(120,mean = 50,sd = 10)))
sex <- c(round(rnorm(120,mean = 0.5,sd = 0.2)))
l1 <- as.logical(c(round(rnorm(120,sd = 0.2))))
l2 <- as.logical(c(round(rnorm(120,sd = 0.2))))
l3 <- as.logical(c(round(rnorm(120,sd = 0.2))))
l4 <- as.logical(c(round(rnorm(120,sd = 0.2))))
data <- as.data.frame(cbind(age,sex,l1,l2,l3,l4))

实际上我有 12 个标签,但为了便于查看,我省略了其他标签。这个想法是 l1 直到 l4 是逻辑向量。不知何故,这不起作用,所以我希望你能解决这个问题。但请注意,这不是我的主要问题。

创建网格

gs <- list(ntree = c(50,100,150,200,300,500,550),mtry = c(1,2,3,4,5)) %>% cross_df()

选择超参数

  for (h in 1:nrow(gs)) {
    ntree_entry <- gs$ntree[h]
    mtry_entry <- gs$mtry[h]
    (...)
    lrn <- makeMultilabelClassifierChainsWrapper(lrn,order = NULL) 
    lrn <- setPredictType(lrn,"prob")
    task <- makeMultilabelTask(data = data[train_lines,],target = label_bact) 
    mod <- mlr::train(lrn,task)
    }

代替 (...) 我尝试了两种不同的方法来将超参数输入到学习器中:

选项 1:将超参数传递给学习器

lrn <- makeLearner("classif.randomForest",ntree = ntree_entry,mtry = mtry_entry)

选项 2:将超参数传递给学习器

lrn <- makeLearner("classif.randomForest")
lrn <- setHyperPars(lrn,par.vals = list(ntree = ntree_entry,mtry = mtry_entry))

检查

控制台告诉我超参数在学习器中:

>lrn
Learner classif.randomForest from package randomForest
Type: classif
Name: Random Forest; Short name: rf
Class: classif.randomForest
Properties: twoclass,multiclass,numerics,factors,ordered,prob,class.weights,oobpreds,featimp
Predict-Type: response
Hyperparameters: ntree=50,mtry=1

ntree 和 mtry 是 makeLearner 已知的超参数,因为它们都在 getParamSet 中:

> getParamSet("classif.randomForest")

                     Type  len   Def   Constr Req Tunable Trafo
ntree             integer    -   500 1 to Inf   -    TRUE     -
mtry              integer    -     - 1 to Inf   -    TRUE     -
replace           logical    -  TRUE        -   -    TRUE     -
classwt     numericvector <NA>     - 0 to Inf   -    TRUE     -
cutoff      numericvector <NA>     -   0 to 1   -    TRUE     -
strata            untyped    -     -        -   -   FALSE     -
sampsize    integervector <NA>     - 1 to Inf   -    TRUE     -
nodesize          integer    -     1 1 to Inf   -    TRUE     -
maxnodes          integer    -     - 1 to Inf   -    TRUE     -
importance        logical    - FALSE        -   -    TRUE     -
localImp          logical    - FALSE        -   -    TRUE     -
proximity         logical    - FALSE        -   -   FALSE     -
oob.prox          logical    -     -        -   Y   FALSE     -
norm.Votes        logical    -  TRUE        -   -   FALSE     -
do.trace          logical    - FALSE        -   -   FALSE     -
keep.forest       logical    -  TRUE        -   -   FALSE     -
keep.inbag        logical    - FALSE        -   -   FALSE     -

问题

为什么我会收到消息“未知或未初始化的列:ntree”? 虽然只是警告,不是错误,但恐怕它只会使用我创建的网格的第一行。模型的大小似乎证实了这一点。它们都具有相同的尺寸。 我希望有人可以帮助我解决这个问题。 提前致谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)