当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R finetune tune_race_win_loss 通过带有输赢统计数据的比赛进行高效的网格搜索


tune_race_win_loss() 为一组预定义的调整参数计算一组性能指标(例如,准确性或 RMSE),这些参数对应于一次或多次数据重采样的模型或配方。在评估初始数量的重采样后,该过程消除了使用统计模型不太可能获得最佳结果的调整参数组合。对于调整参数的每个成对组合,计算赢/输统计数据,并使用逻辑回归模型来衡量每个组合总体获胜的可能性。

用法

tune_race_win_loss(object, ...)

# S3 method for model_spec
tune_race_win_loss(
  object,
  preprocessor,
  resamples,
  ...,
  param_info = NULL,
  grid = 10,
  metrics = NULL,
  control = control_race()
)

# S3 method for workflow
tune_race_win_loss(
  object,
  resamples,
  ...,
  param_info = NULL,
  grid = 10,
  metrics = NULL,
  control = control_race()
)

参数

object

parsnip 模型规范或 workflows::workflow()

...

目前未使用。 Kuhn (2014) 说明了该方法的技术细节。

竞赛方法是网格搜索的有效方法。最初,该函数评估一小组初始重采样的所有调整参数。 control_race()burn_in 参数设置初始重新采样的数量。

当前一组重新采样的性能统计数据将转换为获胜/失败/平局结果。例如,对于分类模型中的两个参数( jk ),每个参数均已重采样三次:


            |  area under the ROC curve |
            -----------------------------
   resample | parameter j | parameter k | winner
   ---------------------------------------------
       1    |    0.81     |     0.92    |   k
       2    |    0.95     |     0.94    |   j
       3    |    0.79     |     0.81    |   k
   ---------------------------------------------

第三次重新采样后,参数 kj 的赢/输比为 2:1。对于每个设置,具有相同结果的参数将被视为half-win。这些统计数据是针对参数的所有成对组合确定的,并且使用 Bradley-Terry 模型对这些赢/输/平局统计数据进行建模。该模型可以计算参数组合赢得总体胜利的能力。计算获胜能力的置信区间,并且保留区间包含零的任何设置以供将来重新采样(因为它在统计上与最佳结果没有差异)。

下一次重新采样将与剩余的参数组合一起使用,并更新统计分析。处理每个新的重采样时可以排除更多候选参数。

control_race() 函数包含应用于 Bradley-Terry 模型结果的显著性截止参数以及其他相关参数。

preprocessor

使用 recipes::recipe() 创建的传统模型公式或配方。

resamples

具有多次重采样的 rset() 对象(即不是验证集)。

param_info

dials::parameters() 对象或 NULL 。如果没有给出,则从其他参数派生参数集。当需要自定义参数范围时,传递此参数可能很有用。

grid

调谐组合或正整数的 DataFrame 。 DataFrame 应具有用于调整每个参数的列和用于调整候选参数的行。整数表示要自动创建的候选参数集的数量。

metrics

一个 yardstick::metric_set()NULL

control

用于修改调整过程的对象。

具有主类 tune_race 的对象,其标准格式与 tune::tune_grid() 生成的对象相同。

参考

Kuhn, M 2014。“机器学习模型交叉验证中的无效性分析”。 https://arxiv.org/abs/1405.6974

例子

# \donttest{
library(parsnip)
library(rsample)
library(dials)

## -----------------------------------------------------------------------------

if (rlang::is_installed(c("discrim", "modeldata"))) {
  library(discrim)
  data(two_class_dat, package = "modeldata")

  set.seed(6376)
  rs <- bootstraps(two_class_dat, times = 10)

  ## -----------------------------------------------------------------------------

  # optimize an regularized discriminant analysis model
  rda_spec <-
    discrim_regularized(frac_common_cov = tune(), frac_identity = tune()) %>%
    set_engine("klaR")

  ## -----------------------------------------------------------------------------

  ctrl <- control_race(verbose_elim = TRUE)

  set.seed(11)
  grid_wl <-
    rda_spec %>%
    tune_race_win_loss(Class ~ ., resamples = rs, grid = 10, control = ctrl)

  # Shows only the fully resampled parameters
  show_best(grid_wl, metric = "roc_auc")

  plot_race(grid_wl)
}
#> ℹ Racing will maximize the roc_auc metric.
#> ℹ Resamples are analyzed in a random order.
#> ℹ Bootstrap05: 1 eliminated; 9 candidates remain.
#> ℹ Bootstrap07: 1 eliminated; 8 candidates remain.
#> ℹ Bootstrap10: 1 eliminated; 7 candidates remain.
#> ℹ Bootstrap01: 1 eliminated; 6 candidates remain.
#> ℹ Bootstrap08: 1 eliminated; 5 candidates remain.
#> ℹ Bootstrap03: 1 eliminated; 4 candidates remain.
#> ℹ Bootstrap09: 1 eliminated; 3 candidates remain.

# }

相关用法


注:本文由纯净天空筛选整理自Max Kuhn等大神的英文原创作品 Efficient grid search via racing with win/loss statistics。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。