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

如何从mlr3的BenchmarkResult中提取特征选择后的模型结果?

从mlr3的BenchmarkResult中提取特征选择结果与变量重要性的方法

1. 前提确认

你运行benchmark()时已经设置了store_models = TRUE,这是能提取到模型的必要条件,你的代码已经满足该要求。

2. 提取经特征选择的学习器选中的特征

首先调用$score()获得包含所有训练fold信息的结果表,之后筛选出AutoFSelector对应的条目,再从模型中提取最优特征子集:

# 获得全量评分表
score_tb = bmr_Wra$score()
# 筛选出特征选择包装器(AutoFSelector)对应的行,可根据自己设置的学习器id调整匹配条件
fs_learner_row = score_tb[learner_id == "classif.ranger.fselector"]
# 提取训练好的AutoFSelector模型
trained_at = fs_learner_row$learner[[1]]
# 提取特征选择后得到的最优特征子集
selected_features = trained_at$archive$best()$features
print(selected_features)

3. 提取变量重要性

你可以从最终训练的基学习器(也就是你用的ranger模型)中提取变量重要性,操作如下:

# 提取AutoFSelector在最优特征上最终训练完成的ranger模型
final_ranger = trained_at$learner
# 提取变量重要性
var_imp = final_ranger$importance()
print(var_imp)

4. 提取未做特征选择的普通ranger模型的对应信息

如果需要对比基准模型的结果,同样可以从score表中筛选对应条目提取:

# 筛选普通ranger学习器的行
base_learner_row = score_tb[learner_id == "classif.ranger"]
# 提取训练好的普通ranger模型
trained_base_ranger = base_learner_row$learner[[1]]
# 提取其变量重要性
base_var_imp = trained_base_ranger$importance()

补充说明

如果你的benchmark设置了多折交叉验证,那么每一个fold都会对应一个训练好的AutoFSelector实例,你可以批量遍历score_tb中所有对应行,分别提取每个fold的最优特征和变量重要性后汇总结果;如果需要提取特征选择过程中的所有搜索记录,可以访问trained_at$archive$data获得全部特征子集的评估结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.15 15:24:01