mlr3中AutoFSelector输出多性能指标的代码修改咨询
解决mlr3 AutoFSelector多性能指标输出问题
错误原因
AutoFSelector$new()的measure参数仅接受单个性能指标(用于指导特征选择的优化方向),而你用msrs()生成了指标列表(list类型),不符合参数要求,因此触发no applicable method for 'as_measure' applied to an object of class "list"错误。
修改方案
要输出多性能指标,需分两步:指定一个核心指标驱动特征选择,同时传递额外指标用于记录。修改后的代码如下:
ARMSS <- read.csv("Index ARMSS Proteomics Final.csv", row.names=1) set.seed(123, "L'Ecuyer") # 创建回归任务 task = as_task_regr(ARMSS, target = "Index.ARMSS") # 定义学习器 learner = lrn("regr.ranger", importance = "impurity") set_threads(learner, n = 8) # 内部交叉验证设置 resampling_inner = rsmp("cv", folds = 7) # 指定特征选择的核心优化指标 main_measure = msr("regr.rmse") # 定义需要额外记录的其他指标 additional_measures = msrs(c("regr.srho")) terminator = trm("none") # 初始化AutoFSelector,传入核心指标+额外指标 at = AutoFSelector$new( learner = learner, resampling = resampling_inner, measure = main_measure, additional_measures = additional_measures, # 添加额外指标 terminator = terminator, fselect = fs("rfe", n_features = 1, feature_fraction = 0.5, recursive = FALSE), store_models = TRUE ) # 运行特征选择 at$train(task) # 提取包含多指标的结果 results <- at$archive$data() # 查看关键列:特征子集、RMSE、Spearman相关系数 print(results[, c("features", "regr.rmse", "regr.srho")])
说明
measure参数必须是单个指标,用于指导特征选择算法筛选最优特征子集。additional_measures参数接受指标列表,会在特征选择的每一步交叉验证中计算并记录这些指标。- 运行完成后,通过
at$archive$data()可以获取所有候选特征子集对应的完整多指标结果,按需提取即可。
内容的提问来源于stack exchange,提问作者awaldman
相关产品推荐
相关产品推荐

