我已经使用{tidymodels}
和{workflow_set}
成功地调优了几个模型。然而,当使用tune::last_fit()
测试验证数据集时,tune::select_best
获得的参数表现不佳。这使我想手动测试验证集上的其他参数集。我发现tune::show_best()
和tune::select_best()
在这方面非常有限,因为它们在选择正确的参数时只考虑一个度量。我已经成功地用一个更复杂的逻辑过滤了tibles,这个逻辑涉及到使用纯{dplyr}
的几个指标,但这不是最佳的,而且很耗时,每次我想测试一个模型时,都需要手动完成每个模型。
有没有一种方法可以根据workflow_id和cherry pick一组参数。配置数据的tibble?
如果tune::select_best()
可以选择更多的条件来选择模型,这将非常有帮助。
这是获得“最佳”参数集的经典过程(不幸的是,这不是我的情况,因为我得到了一个具有非常高的roc_auc但非常糟糕的spec的模型)。
models_tuned <- models %>%
workflow_map("tune_bayes",
resamples = cv_folds,
initial = 20,
iter= 10,
metrics = mm_metrics,
verbose = TRUE)
best_results <- models_tuned %>%
extract_workflow_set_result(id = "norm_nnet") %>%
select_best(metric = "accuracy")
fitted_workflow <- models_tuned %>%
extract_workflow(id = "norm_nnet") %>%
finalize_workflow(best_results) %>%
last_fit(split=split_df,
metrics=mm_metrics)
1条答案
按热度按时间nnt7mjpx1#
如here所示:
您可以将任何参数传递给
finalize_workflow()
。parameters
参数接受包含优化参数值的任何tibble。还有其他
select_*()
函数和未发布的desirability2包可以使用。例如,我得到了一个roc_auc很高但规格很差的模型
这听起来像是阶级不平衡。你可能会考虑使用成本敏感的学习方法或重新平衡(也许是themis)。