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
相关产品推荐
相关产品推荐

