r - 使用 MLR 包调整 randomForest 截止值

标签 r mlr

我一直在探索泰坦尼克号的奇妙 mlrdata set 。我的问题是实现随机森林。更具体地说,我想调整 cutoff (即为给定类分配不纯的叶子的阈值)。问题是 cutoff 参数采用两个值,但是,我只能计算出在 mlr 中转入单个值的超参数。

代码:

library(mlr)
library(dplyr)

dTrain <- read.csv('path/to/data/')

#Defining the Task
trainTask <- makeClassifTask(data = dTrain %>% 
                           select(-Name, -Ticket, -Cabin) %>% 
                           filter(complete.cases(.)), 
                         target = "Survived", 
                         id = "PassengerId")

#Defining Learning
rfLRN <- makeLearner("classif.randomForest")

#Defining the Parameter Space
ps <- makeParamSet(
 makeDiscreteParam("cutoff", values = list(c(.5,.5), c(.75,.25)))
)

这就是问题所在,cutoff需要两个值,但是,我不确定如何传递这两个值。上述尝试是错误的。我尝试了其他几个参数生成器,即 makeDiscreteVectorParam 等...但无济于事。有什么建议吗?

如果我尝试调整像 mtry 这样的参数(即在给定分割中选择的特征数量),一切都会正常。

#Defining the Hyperparameter Space
ps = makeParamSet(
  makeDiscreteParam("mtry", values = c(2,3,4,5))
)

#Defining Resampling
cvTask <- makeResampleDesc("CV", iters=5L)

#Defining Search
search <-  makeTuneControlGrid()

#Tune!
tune <- tuneParams(learner = rfLRN
                 ,task = trainTask
                 ,resampling = cvTask
                 ,measures = list(acc)
                 ,par.set = ps
                 ,control = search
                 ,show.info = TRUE)

最佳答案

看起来您需要为这些分类截止值指定名称,例如:

#Defining the Parameter Space
ps <- makeParamSet(
  makeDiscreteParam("cutoff", values = list(
    a=c(.50,.50),
    b=c(.75,.25)))
)

输出:

> tune <- tuneParams(learner = rfLRN
+                    ,task = trainTask
+                    ,resampling = cvTask
+                    ,measures = list(acc)
+                    ,par.set = ps
+                    ,control = search
+                    ,show.info = TRUE)
[Tune] Started tuning learner classif.randomForest for parameter set:
           Type len Def Constr Req Tunable Trafo
cutoff discrete   -   -    a,b   -    TRUE     -
With control class: TuneControlGrid
Imputation value: -0
[Tune-x] 1: cutoff=a
[Tune-y] 1: acc.test.mean=0.828; time: 0.0 min
[Tune-x] 2: cutoff=b
[Tune-y] 2: acc.test.mean=0.776; time: 0.0 min
[Tune] Result: cutoff=a : acc.test.mean=0.828

关于r - 使用 MLR 包调整 randomForest 截止值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42868463/

相关文章:

r - 通过 R 中的 mlr 设置 h2o 的种子

R mlr - 从训练数据子集和整个测试数据(不是整个训练数据)创建学习曲线?

r - 因子列上的 sum(.) 返回不正确的结果

当最后一个和下一个非 NA 值相等时替换 NA

sql - 使用 dplyr 和 SQLite 进行 UTF-8 编码

r - mlrMBO rBayesian通过插入符号优化 R keras 模型的错误

r - 如何将阻塞因子包含在 mlr 包的 makeClassifTask() 中?

r - 如何多次绑定(bind)同一个向量?

r - 多列使用方程计算新列

r - mlr 包 : Cross-validation with tuneParams() and resample() yield different results