参数调整输出 NA
parameter tuning output NA
我不熟悉 mlr 包的参数调整。我最近在二进制分类问题上尝试使用 xgboost 算法。我无法获得经过训练的准确性,只有 NA。在 google 轮之后,我无法调试我的代码。你能给我一些建议吗?
这是一个在 R base 中使用 mtcars 数据的可重现示例:
library(mlr)
library(parallelMap)
mtcars
set.seed(1)
train.index=sample(nrow(mtcars),nrow(mtcars)*0.7)
train=mtcars[train.index,]
test=mtcars[-train.index,]
list(dim(train),dim(test))
# set the tuning
tune.dat=train[,c('mpg','cyl','disp','wt','vs','am')]
traintask=makeClassifTask(data=tune.dat,target='am')
learner=makeLearner('classif.xgboost',predict.type='response',nrounds=300,nthread=2)
prange=makeParamSet(
makeNumericParam('eta',lower=0.01,upper=0.3),
makeNumericParam('max_depth',lower=2,upper=10),
makeNumericParam('subsample',lower=0.4,upper=0.8),
makeNumericParam('colsample_bytree',lower=0.4,upper=0.8)
)
ctrl=makeTuneControlRandom(maxit=50)
rdesc=makeResampleDesc('CV',iters=4)
parallelStartMulticore(2)
# tune
mytune=tuneParams(learner=learner,task=traintask,par.set=prange,control=ctrl,resampling=rdesc)
mytune$y
结果应该是一个数字而不是 NA
我发现您的代码有 2 个问题:
1)'am'字段想成为一个因子
tune.dat[, 'am'] <- as.factor(tune.dat[, 'am'])
2)max_depth参数要为整数
makeIntegerParam('max_depth', lower = 2, upper = 10),
通过这些替换,输出为
mmce.test.mean
0.225
我不熟悉 mlr 包的参数调整。我最近在二进制分类问题上尝试使用 xgboost 算法。我无法获得经过训练的准确性,只有 NA。在 google 轮之后,我无法调试我的代码。你能给我一些建议吗?
这是一个在 R base 中使用 mtcars 数据的可重现示例:
library(mlr)
library(parallelMap)
mtcars
set.seed(1)
train.index=sample(nrow(mtcars),nrow(mtcars)*0.7)
train=mtcars[train.index,]
test=mtcars[-train.index,]
list(dim(train),dim(test))
# set the tuning
tune.dat=train[,c('mpg','cyl','disp','wt','vs','am')]
traintask=makeClassifTask(data=tune.dat,target='am')
learner=makeLearner('classif.xgboost',predict.type='response',nrounds=300,nthread=2)
prange=makeParamSet(
makeNumericParam('eta',lower=0.01,upper=0.3),
makeNumericParam('max_depth',lower=2,upper=10),
makeNumericParam('subsample',lower=0.4,upper=0.8),
makeNumericParam('colsample_bytree',lower=0.4,upper=0.8)
)
ctrl=makeTuneControlRandom(maxit=50)
rdesc=makeResampleDesc('CV',iters=4)
parallelStartMulticore(2)
# tune
mytune=tuneParams(learner=learner,task=traintask,par.set=prange,control=ctrl,resampling=rdesc)
mytune$y
结果应该是一个数字而不是 NA
我发现您的代码有 2 个问题:
1)'am'字段想成为一个因子
tune.dat[, 'am'] <- as.factor(tune.dat[, 'am'])
2)max_depth参数要为整数
makeIntegerParam('max_depth', lower = 2, upper = 10),
通过这些替换,输出为
mmce.test.mean
0.225