使用“predict.type = prob”对随机森林进行 MLR 包超参数调整

问题描述 投票:0回答:1

我想在 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 将类的名称更改为更好理解的名称,但它没有帮助,我不知道我可以更改什么。您知道导致错误的原因以及如何修复它吗?

r machine-learning random-forest hyperparameters mlr
1个回答
0
投票

mlr
软件包不再维护 - 请使用后继者
mlr3
。 mlr3 书中有一个关于超参数优化的章节可以帮助您入门。

© www.soinside.com 2019 - 2024. All rights reserved.