如何使用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)