ошибка: аргумент "х" отсутствует, по умолчанию нет? - PullRequest
0 голосов
/ 24 марта 2020

Поскольку я очень новичок в XGBoost, я пытаюсь настроить параметры, используя библиотеку и модель mlr , но после использования setHayperPars () обучение с помощью train () выдает ошибку (в частности, когда я запускаю * 1003) * xgmodel строка): Ошибка в именах столбцов (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)

Может кто-нибудь сказать мне, что случилось!?

1 Ответ

3 голосов
/ 24 марта 2020

Вы должны быть очень осторожными при загрузке нескольких пакетов, которые могут включать методы с одинаковыми именами - здесь caret и mlr, которые оба включают метод train. Более того, порядок операторов library имеет значение: здесь, поскольку caret загружается после mlr, он маскирует функции с тем же именем из него (и, возможно, любой другой пакет, загруженный ранее) , как train.

В вашем случае, когда вы, очевидно, хотите использовать метод train из mlr (а не из caret), вы должны явно указать это в своем коде:

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