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

tidymodels:使用metric_tweak自定义f_meas加入metric_set报错求助

解决tidymodels中自定义macro-weighted F1指标报错问题

问题场景

使用鸢尾花(iris)数据集进行KNN分类器调参时,通过metric_tweak创建macro-weighted版本的f_meas指标,加入metric_set后触发报错,错误核心为formal argument "estimator" matched by multiple actual arguments(参数estimator被多次传递)。

报错原因

metric_tweak的参数使用方式错误:直接将estimator = "macro_weighted"作为metric_tweak的参数传递,导致调用原f_meas函数时,该参数被重复传入,引发参数匹配冲突。

解决方案

提供两种可行的修正方式:

方式1:正确使用metric_tweak的fun.args参数

通过fun.args参数将原指标函数的参数以列表形式传入,避免重复传递:

# 修正自定义指标的创建方式
f_meas_weighted <- metric_tweak(
  "f_meas_weighted", 
  f_meas, 
  fun.args = list(estimator = "macro_weighted")
)

方式2:直接在metric_set中指定f_meas的参数

无需创建自定义指标,直接在metric_set内设置f_meas的estimator参数:

# 在tune_bayes中直接使用
metrics = metric_set(f_meas(estimator = "macro_weighted"))

修正后的完整代码(方式1示例)

library(tidyverse)
library(tidymodels)
tidymodels_prefer()

# 正确创建自定义macro-weighted F1指标
f_meas_weighted <- metric_tweak(
  "f_meas_weighted", 
  f_meas, 
  fun.args = list(estimator = "macro_weighted")
)

# workflow流程
set.seed(2023)
df <- iris 
splits <- initial_split(df, strata = Species, prop = 4/5)
df_train <- training(splits)
df_test  <- testing(splits)

df_rec <- recipe(Species ~ ., data = df_train) 

knn_model <- nearest_neighbor(neighbors = tune()) %>% 
  set_engine("kknn") %>% 
  set_mode("classification")

df_wflow <- workflow() %>%
  add_model(knn_model) %>%
  add_recipe(df_rec) 

set.seed(2023)
knn_cv <-
  df_wflow %>%
  tune_bayes(
    metrics = metric_set(f_meas_weighted),
    resamples = vfold_cv(df_train, strata = "Species", v = 2),
    control = control_bayes(verbose = TRUE, save_pred = TRUE)
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:45:34