我想在 R 中构建一个随机森林模型,为了找到完美的超参数,我想使用 MLR 包进行自动超参数调整。这是一个分类问题,因此我希望模型能够预测结果变量“kategorie_who”的类别的概率。为了创建学习器,我使用 makeLearner 函数和“classif.randomForest”。
这是代码:
library(mlr)
library(ParamHelpers)
library(randomForest)
set.seed(123)
#create a task
trainTask <- makeClassifTask(data = training_data, target = "kategorie_who")
#create a learner
rf <- makeLearner("classif.randomForest",
predict.type = "prob",
par.vals = list(ntree = 100,
mtry = floor((ncol(training_data)-1)/3)))
rf$par.vals <- list(importance = TRUE)
#set tune parameters
#grid search to find hyper parameters
rf_param <- makeParamSet(
makeIntegerParam("ntree", lower = 50, upper = 500),
makeIntegerParam("mtry", lower = floor((ncol(training_data)-1)/3),
upper = ncol(training_data)))
#random search for 10 iterations
rancontrol <- makeTuneControlRandom(maxit = 10L)
#set 3 fold cross validation
set_cv <- makeResampleDesc("CV", iters = 3L)
#hyper tuning
rf_tune <- tuneParams(learner = rf,
resampling = set_cv,
task = trainTask,
par.set = rf_param,
control = rancontrol,
measures = acc)
现在的问题是:当我设置 'predict.type = "response"' 时,一切正常。但由于我希望将类概率作为结果,因此我设置了“predict.type = prob”,并且在运行代码时出现以下错误:
Error in checkPredictLearnerOutput(.learner, .model, p) :
predictLearner for classif.randomForest has returned not the class levels as column names: 1.1_2,1.1_3,1.1_4,1.3_4,1.4_1,1.4_2,1.4_3,1.5_1,1.6_1,1.6_3,12_Nicht anwendbar,13_Nicht anwendbar,14_Nicht anwendbar,2_1,6_1,7.1_Unsicher,7.2_Unsicher,9.1_Nicht anwendbar,unbekannt_Unsicher
我尝试使用 make.names-function 将类的名称更改为更好理解的名称,但它没有帮助,我不知道我可以更改什么。您知道导致错误的原因以及如何修复它吗?