在R中使用Vetiver时,分类模型调用compute_metrics为何报metric_set错误?
解决Vetiver中分类模型监控指标计算的metric_set错误
问题诊断
你遇到的metric_set相关错误,核心原因有两个:
- 分类模型通过
augment()生成的预测列是.pred_class,但vetiver_compute_metrics()默认使用回归场景的.pred作为预测列,导致无法匹配分类指标的计算要求 - 调用
vetiver_compute_metrics()时参数传递的顺序或命名不明确,引发指标计算逻辑错误
修正后的代码
library(parsnip) library(recipes) library(workflows) library(tidyverse) library(vetiver) library(pins) library(plumber) library(yardstick) # 显式加载yardstick,metric_set依赖该包 data(bivariate, package = "modeldata") # 数据预处理与模型训练 biv_rec <- recipe(Class ~ ., data = bivariate_train) %>% step_BoxCox(all_predictors()) %>% step_normalize(all_predictors()) svm_spec <- svm_linear(mode = "classification") %>% set_engine("LiblineaR") svm_fit <- workflow(biv_rec, svm_spec) %>% fit(sample_frac(bivariate_train, 0.7)) # 模型封装与部署相关操作(保留原有逻辑) v <- vetiver_model(svm_fit, "biv_svm") model_board <- board_temp(versioned = TRUE) model_board %>% vetiver_pin_write(v) model_board %>% pin_versions("biv_svm") pr() %>% vetiver_api(v) vetiver_write_plumber(model_board, "biv_svm") # 准备带时间戳的验证数据 bivariate_val$date_obs <- seq(from = as.Date("2021-01-01"), to = as.Date("2021-10-27"), by = 'day') newData1 <- bivariate_val[1:150,] # 定义分类指标集 class_metrics_T <- metric_set(accuracy, kap) # 修正后的指标计算逻辑 original_metrics <- augment(v, new_data = newData1) %>% vetiver_compute_metrics( timestamp = date_obs, period = "week", truth = Class, estimate = .pred_class, # 关键:指定分类模型的预测列 metrics = class_metrics_T ) # 查看计算结果 original_metrics
关键修正说明
- 显式加载yardstick包:
metric_set()是yardstick包的核心函数,显式加载可避免命名空间冲突导致的函数调用失败 - 指定分类预测列:分类模型执行
augment()后,类别预测结果存储在.pred_class列,必须显式通过estimate参数指定,替代默认的回归场景列.pred - 使用命名参数传递:避免参数顺序混淆,让代码逻辑更清晰,降低后续维护成本
修正后,original_metrics会按周聚合输出分类模型的accuracy和kappa指标,可直接通过vetiver_plot_metrics()生成监控可视化图表。
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

