问题描述
问题
我想使用自制网格提供的不同超参数进行网格搜索。但是当我运行代码时,我收到一条警告:“未知或未初始化的列: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 (将#修改为@)