如何使用expand.grid值为ranger中的ranger运行各种模型超参数组合
我看过很多关于如何使用如何使用expand.grid值为ranger中的ranger运行各种模型超参数组合,r,grid-search,R,Grid Search,我看过很多关于如何使用expand.grid为模型选择自变量,然后根据选择创建公式的文章。但是,我事先准备好输入表并将它们存储在列表中 库(ranger) 数据(iris) Input_list我认为将所需值的训练和提取封装到一个函数中是最干净的。使用下面的purrr::pmap功能时需要点(…) fit_and_extract_metrics <- function(Target, Input_table, Trees, Importance, Classification, ...)
expand.grid
为模型选择自变量,然后根据选择创建公式的文章。但是,我事先准备好输入表并将它们存储在列表中
库(ranger)
数据(iris)
Input_list我认为将所需值的训练和提取封装到一个函数中是最干净的。使用下面的purrr::pmap
功能时需要点(…
)
fit_and_extract_metrics <- function(Target, Input_table, Trees, Importance, Classification, ...) {
RF_train <- ranger(
dependent.variable.name = Target,
data = Input_list[[Input_table]], # referring to the named object in the list
num.trees = Trees,
importance = Importance,
classification = Classification) # otherwise regression is performed
data.frame(Prediction_error = RF_train$prediction.error,
True_positive = RF_train$confusion.matrix[1])
}
通过这种方式映射,函数将逐行应用,因此您不应该遇到内存问题
purrr::pmap
的结果是一个列表,这意味着列res
包含每一行的列表。可以使用tidyr::unnest
将该列表的元素分散到数据帧中,从而取消该列表
tidyr::unnest(hyper_grid, res)
我认为这种方法非常优雅,但它需要一些知识。如果你想了解更多,我强烈推荐你。第25章(许多模型)介绍了一种类似于我在这里采用的方法。这是一种很好的方法,谢谢。由于混乱.matrix
不是一个单一的值,而是一个3x3表,它不适合data.frames行,我应该在那里更精确。是否可以将多个值从RF_train对象返回到hyper_grid
data.frame的同一行?例如hyper\u grid$True\u positive噢,哇,这太棒了,而且非常奇怪;-)。我不知道您可以将列表添加到data.frame。几个月来,我一直在为这种工作流开发代码,人们推荐purr
,但我无法让它工作或接受结果。这真的是一个很大的帮助,嗯,似乎有一些关于如何传递参数的问题,你知道如何处理这个问题吗?
tidyr::unnest(hyper_grid, res)