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

mlr3自动调优+自定义重采样结合类别平衡时行ID错误求助

mlr3verse 医疗不平衡数据集重采样行ID错误排查建议
  • 检查自定义重采样的行ID映射
    自定义分组+分层的拆分逻辑容易出现索引错位,直接打印重采样实例的训练/测试索引,和原始任务的行ID做比对:

    # 查看第一折的训练/测试索引
    resampling$instance$train[[1]]
    resampling$instance$test[[1]]
    # 对比原始任务的行ID
    task$row_ids()
    

    确认所有索引都是原始行ID的子集,没有出现超出范围或类型不匹配的情况。

  • 验证GraphLearner的节点执行逻辑
    classbalancing节点仅在训练阶段生效,要确保Graph的流程是classbalancing在前、模型在后,且没有在测试阶段误修改行ID。可以单独测试GraphLearner的预测流程:

    # 手动取一组测试行ID
    test_ids <- task$row_ids()[1:10]
    # 尝试预测
    graph_learner$predict(task, row_ids = test_ids)
    

    如果这里报错,直接定位是classbalancing节点的配置问题;如果正常,再排查benchmark的重采样嵌套逻辑。

  • 排查auto_tuner与GraphLearner的嵌套冲突
    嵌套调优时,内部重采样的行ID可能和外部benchmark的重采样ID出现传递错误。先去掉auto_tuner,用纯GraphLearner跑benchmark:

    # 临时替换为无调优的GraphLearner
    learner <- as_learner(graph)
    benchmark(benchmark_grid(task, learner, resampling))
    

    如果此时不报错,说明问题出在auto_tuner的内部重采样与GraphLearner的交互上,需要检查auto_tuner的resampling参数是否和外部重采样兼容(比如是否都遵循了PatientID分组约束)。

  • 确认行ID的类型一致性
    医疗数据集的PatientID如果是字符串,要确保任务的行ID类型和重采样输出的索引类型一致:

    # 查看行ID类型
    class(task$row_ids())
    # 查看重采样输出的测试ID类型
    class(resampling$instance$test[[1]])
    

    若类型不一致(比如一个是字符串、一个是整数),会导致mlr3无法匹配行ID,需要统一行ID类型(比如把字符串ID转成整数,或确保重采样拆分时保留字符串ID)。

  • 简化用例缩小问题范围
    用极小的数据集子集(比如10个Patient,每个Patient2-3个样本)重现问题,逐步移除自定义逻辑:先去掉分组拆分,只用分层;再去掉classbalancing;最后去掉auto_tuner,一步步定位是哪部分逻辑导致的行ID错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:57:24