如何为不同训练样本绘制置信区间及训练过程方差
多划分训练实验的均值曲线与置信区间绘制方案
以下两种方案都可以满足你的需求,你可以根据自己的使用场景选择:
方案1:使用Wandb原生聚合功能(零额外代码)
这是最快实现需求的方式,直接通过Wandb看板操作即可:
- 所有不同数据划分的训练实验,在初始化时打上相同的
group标记,示例启动参数:import wandb # 不同划分只需要修改job_type的值,group保持一致 wandb.init( project="你的项目名", group="data_ablation_split", job_type=f"split_{split_idx}" ) - 所有实验跑完后,进入Wandb项目看板,选中所有同组的目标实验,打开对应指标的折线图设置面板
- 聚合方式选择
mean,同时开启显示置信区间选项,即可自动生成带置信区间填充的均值曲线;如果需要查看方差变化,把聚合方式切换为std即可
方案2:手动计算自定义绘图(灵活性更高)
如果你需要在训练过程中实时输出统计结果,或者自定义绘图样式,可以自己计算统计量后上传:
- 每间隔固定步长,拉取同组所有实验当前步的指标数值,计算均值、标准差、置信区间:
import numpy as np import scipy.stats as st # all_step_metrics为当前步所有划分实验的指标值列表 metric_mean = np.mean(all_step_metrics) metric_std = np.std(all_step_metrics) # 计算95%置信区间上下界 ci_low, ci_high = st.t.interval( confidence=0.95, df=len(all_step_metrics)-1, loc=metric_mean, scale=st.sem(all_step_metrics) ) - 可以直接将上述统计量作为单独的指标上传到Wandb,也可以通过绘图库生成带置信区间的曲线图后上传:
import seaborn as sns import pandas as pd # 所有实验的历史数据整理为长表,字段为步长、指标值、划分编号 exp_df = pd.DataFrame( all_history_data, columns=["step", "accuracy", "split_id"] ) # 自动绘制均值+95%置信区间填充的曲线 sns.lineplot(data=exp_df, x="step", y="accuracy", errorbar=("ci", 95)) # 如果要显示方差填充,把errorbar参数改为("sd", 1)即可 - 生成的图片可以通过
wandb.log({"metric_plot": wandb.Image(plt)})直接上传到Wandb看板
内容的提问来源于stack exchange,提问作者Anđela Todorović
相关产品推荐
相关产品推荐

