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

Snakemake规则中如何为shell命令传入不同整数参数实现BDT超参数调优

报错原因

你当前写法报错的核心是nestimators[i] for i in range(2)是Python生成器表达式,直接传入str.format()时不会自动展开为参数值,只会打印生成器对象的内存地址,也就是你看到的报错内容。如果要实现多超参数并行训练,需要配合Snakemake的通配符、任务展开功能修改流程。

可运行的修改方案

1. 修改后的Snakefile完整代码

user = '/home/.../BDT/'
# 可在此处随意添加更多要测试的nestimators取值
nestimators = [1, 2, 10, 50, 100]

rule all:
    input: user + 'AUC_score.pdf'

# 单组超参数的训练规则,通过通配符匹配不同参数值
rule train_single:
    output: temp(user + 'auc_result_{n_est}.csv')
    shell: 'python bdt.py --nestimators {wildcards.n_est} --output {output}'

# 合并所有单组训练结果的规则
rule merge_results:
    input: expand(user + 'auc_result_{n_est}.csv', n_est=nestimators)
    output: user + 'AUC_score.csv'
    shell: 'python merge_csv.py --inputs {input} --output {output}'

# 结果可视化规则
rule plotting:
    input: user + 'AUC_score.csv'
    output: user + 'AUC_score.pdf'
    shell: 'python opti.py'

2. 补充配套脚本

  • 新增merge_csv.py,用于合并多组训练结果为总表:
import pandas as pd
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--inputs', nargs='+')
parser.add_argument('--output')
args = parser.parse_args()

all_result = []
for single_file in args.inputs:
    df = pd.read_csv(single_file)
    all_result.append(df)
pd.concat(all_result).to_csv(args.output, index=False)
  • 修改你的bdt.py,新增参数解析逻辑,支持接收整数类型的nestimators和结果输出路径:
import argparse
import pandas as pd

parser = argparse.ArgumentParser()
parser.add_argument('--nestimators', type=int)
parser.add_argument('--output', type=str)
args = parser.parse_args()

# 此处保留你原有BDT训练、计算AUC得分的逻辑
# auc = 模型计算得到的AUC值
pd.DataFrame({
    'nestimators': [args.nestimators],
    'auc_score': [auc]
}).to_csv(args.output, index=False)

3. 并行运行方法

执行命令snake make --cores 4即可,--cores后的数字为同时运行的训练任务数,Snakemake会自动并行调度所有超参数的训练任务,全部完成后自动合并结果、生成可视化pdf。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 20:06:00