You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R tidymodels中设置yardstick默认事件水平无效,是Bug还是操作有误?

问题翻译与解答

用户问题(中文翻译)

我想让yardstick默认使用第二分类作为逻辑回归模型的评估水平。我知道可以在单个统计函数里指定event_level = "second",但更希望通过全局选项来设置这个参数,不过尝试后发现没生效。

library(tidymodels)
data("two_class_example")
sens(two_class_example, truth, predicted, event_level = "second")
#> # A tibble: 1 × 3
#>   .metric .estimator .estimate
#>   <chr>   <chr>          <dbl>
#> 1 sens    binary         0.793

options(yardstick.event_level = "second")
sens(two_class_example, truth, predicted)
#> # A tibble: 1 × 3
#>   .metric .estimator .estimate
#>   <chr>   <chr>          <dbl>
#> 1 sens    binary         0.880

创建于2023-07-17,使用reprex v2.0.2

请问这是Bug还是我操作有误?


问题解答

这不是Bug,是对yardstick的全局选项支持理解有误——yardstick并没有实现通过全局选项yardstick.event_level来设置默认event_level的功能。

你在单个函数调用里指定event_level = "second"能生效,是因为该参数是sens()等评估函数的显式参数;但yardstick的核心代码并没有读取options(yardstick.event_level = ...)这个全局设置的逻辑,所以全局选项不会对函数默认行为产生影响。

替代解决方案

如果你不想每次调用都手动指定参数,可以用以下两种方式实现类似全局默认的效果:

1. 使用purrr::partial包装函数

library(purrr)
# 创建默认event_level为"second"的sens函数
sens_second <- partial(sens, event_level = "second")

# 直接调用新函数即可
sens_second(two_class_example, truth, predicted)
#> # A tibble: 1 × 3
#>   .metric .estimator .estimate
#>   <chr>   <chr>          <dbl>
#> 1 sens    binary         0.793

2. 自定义通用包装函数

如果需要多个评估函数都应用这个默认值,可以写一个通用包装器:

set_event_level_default <- function(fn) {
  function(...) {
    fn(..., event_level = "second")
  }
}

# 给多个函数设置默认
sens_second <- set_event_level_default(sens)
spec_second <- set_event_level_default(spec)

后续调用sens_second()或spec_second()时,就会自动使用event_level = "second"作为默认参数。


内容的提问来源于stack exchange,提问作者itsMeInMiami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:32:34