【问题标题】:error : argument "x" is missing, with no default?错误:缺少参数“x”,没有默认值?
【发布时间】:2020-07-04 22:52:25
【问题描述】:

由于我对 XGBoost 非常陌生,我正在尝试使用 mlr 库和模型调整参数,但是在使用 setHayperPars() 学习后使用 train() 会引发错误(特别是当我运行 xgmodel 行):colnames(x) 中的错误:缺少参数“x”,没有默认值,我无法识别此错误的含义,下面是代码:

library(mlr)     
library(dplyr)
library(caret) 
library(xgboost)

set.seed(12345)
n=dim(mydata)[1]
id=sample(1:n, floor(n*0.6)) 
train=mydata[id,]
test=mydata[-id,]

traintask = makeClassifTask (data = train,target = "label")
testtask = makeClassifTask (data = test,target = "label")

#create learner
lrn = makeLearner("classif.xgboost",
                   predict.type = "response")

lrn$par.vals = list( objective="multi:softprob",
                      eval_metric="merror")

#set parameter space
params = makeParamSet( makeIntegerParam("max_depth",lower = 3L,upper = 10L),
                       makeIntegerParam("nrounds",lower = 20L,upper = 100L),
                       makeNumericParam("eta",lower = 0.1, upper = 0.3),
                       makeNumericParam("min_child_weight",lower = 1L,upper = 10L), 
                       makeNumericParam("subsample",lower = 0.5,upper = 1), 
                       makeNumericParam("colsample_bytree",lower = 0.5,upper = 1)) 


#set resampling strategy

configureMlr(show.learner.output = FALSE, show.info = FALSE)

rdesc = makeResampleDesc("CV",stratify = T,iters=5L)

# set the search optimization strategy

ctrl = makeTuneControlRandom(maxit = 10L)

# parameter tuning

set.seed(12345)

mytune = tuneParams(learner = lrn, task = traintask, 
                    resampling = rdesc, measures = acc, 
                    par.set = params, control = ctrl,
                    show.info = FALSE)


# build model using the tuned paramters 

#set hyperparameters
lrn_tune = setHyperPars(lrn,par.vals = mytune$x)

#train model
xgmodel = train(learner = lrn_tune,task = traintask)

谁能告诉我怎么了!?

【问题讨论】:

    标签: r machine-learning xgboost r-caret mlr


    【解决方案1】:

    在加载可能涉及同名方法的多个包时,您必须非常小心 - 这里是 caretmlr,它们都包含 train 方法。此外,library 语句的 顺序 很重要:这里,由于 caret 是在 mlr 之后加载的,因此它会屏蔽具有相同名称的函数(以及之前加载的所有其他包) ),比如train

    在您的情况下,您显然想使用来自mlr(而不是来自caret)的train 方法,您应该在代码中明确声明:

    xgmodel = mlr::train(learner = lrn_tune,task = traintask)
    

    【讨论】:

      猜你喜欢
      • 2017-12-09
      • 1970-01-01
      • 2021-09-17
      • 2016-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-29
      相关资源
      最近更新 更多