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

