如何在MLR3的重采样/基准测试结构中查看PipeOp SMOTE生成的数据
如何在MLR3的重采样/基准测试结构中查看PipeOp SMOTE生成的数据
你遇到的问题其实很常见——在重采样或基准测试流程中,MLR3默认不会留存PipeOp处理后的中间数据,因为每个折的训练过程都是独立进行的,处理后的数据直接传给后续组件就被消耗了。不过我们可以通过两种简单的方式来捕获SMOTE生成的数据,下面结合你的示例代码来讲解:
方法一:在Graph中添加Debug组件保存中间结果
我们可以给你的Graph加入一个debug类型的PipeOp,它会帮我们留存SMOTE处理后的数据集。修改后的代码如下:
# 先创建示例任务(沿用你的代码) data = smotefamily::sample_generator(1000, ratio = 0.80) data$result = factor(data$result) task = TaskClassif$new(id = "example", backend = data, target = "result") # 修改Graph,加入debug组件 gr = Graph$new() gr$add_pipeop(po("smote", dup_size = 140)) # 添加debug PipeOp,用来保存SMOTE输出的数据 gr$add_pipeop(po("debug", id = "smote_debug", keep_results = TRUE)) gr$add_pipeop(mlr_pipeops$get("learner", lrn("classif.ranger", predict_type = "prob"))) # 建立连接:smote -> debug -> 学习器 gr$add_edge("smote", "smote_debug") gr$add_edge("smote_debug", "classif.ranger") # 执行重采样 glrn = GraphLearner$new(gr) rr = resample(task, glrn, rsmp("cv", folds = 3)) # 提取某一折的SMOTE处理后数据(比如第一折) smote_data_fold1 = rr$learners[[1]]$graph$pipeops$smote_debug$state$result # 查看类别分布 table(smote_data_fold1$result)
这个debug组件会把SMOTE处理后的任务数据存在自身的state里,重采样完成后,我们可以从每个折对应的学习器实例中提取出来。
方法二:手动遍历重采样折,单独处理并保存数据
如果你不想修改原有Graph的结构,也可以手动遍历每个重采样折,单独运行SMOTE组件并保存结果:
# 沿用之前的示例任务 data = smotefamily::sample_generator(1000, ratio = 0.80) data$result = factor(data$result) task = TaskClassif$new(id = "example", backend = data, target = "result") # 初始化重采样策略 resampling = rsmp("cv", folds = 3) resampling$instantiate(task) # 创建列表来保存各折的SMOTE处理后数据 smote_processed_data = list() # 遍历每个折 for (i in 1:resampling$iters) { # 获取当前折的训练子集 train_idx = resampling$train_set(i) task_train = task$clone()$filter(train_idx) # 单独运行SMOTE PipeOp smote_po = po("smote", dup_size = 140) smote_result = smote_po$train(list(task_train))[[1]] # 保存处理后的数据到列表 smote_processed_data[[paste0("fold_", i)]] = smote_result$data() } # 查看第一折的类别分布 table(smote_processed_data$fold_1$result)
这里要提醒你:重采样中每个折的SMOTE都是基于该折的训练子集生成的,所以不同折的处理后数据是不一样的——这也是你之前觉得只能看到"各折部分数据"的原因,本质上每个折的SMOTE输出确实是独立的子集。
备注:内容来源于stack exchange,提问作者user24804654
相关产品推荐
相关产品推荐

