2
我一直在探索与泰坦尼克号data set的奇妙mlr
包。我的问题是实施一个随机森林。更具体地说,我想调整cutoff
(即给给定类别分配不纯的叶子的阈值)。问题是cutoff
参数有两个值,但是,我只能找出超参数在mlr
中为一个值。随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)
对于那些有类似的问题,更好的办法是使用' makeNumericParam(“cutoff”,lower = .2,upper = .8,trafo = function(x)c(x,1-x))'而不是'makeDiscreteParam(“cutoff”,values = list(a = c(。 50,.50),b = c(.75,.25))'。为了获得详尽的搜索,更少的编码。 –