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

PyMC3变量标准化/逆标准化处理、先验可视化及预测值还原问题

关于贝叶斯回归变量标准化相关问题的解答

问题1:先验可视化尺度错位的原因与调整方案

现象原因

你现在绘制的先验图出现x轴为标准化weight、y轴为原始height的错位,来自两个代码设定的叠加:

  • 横轴你手动指定了x = np.linspace(-3, 3, 50),这个区间本身就是标准化后变量的典型取值范围(±3倍标准差),所以x轴天然是标准化后的weight尺度
  • 纵轴的计算值来自y = a + b * x,其中a是你模型中定义的alpha参数,该参数的先验Normal(mu=178, sd=20)是完全基于原始身高尺度设置的,所以计算出的y值天然对应原始height的尺度
    额外提醒:你当前的模型设定存在逻辑问题:你传入模型的observed变量height是标准化后的height_s,但参数先验却用了原始尺度的数值,会导致模型拟合完全偏离真实分布

调整方案

  • 统一为全标准化尺度:把模型中alpha的先验修改为适配标准化height的取值,比如pm.Normal('alpha', mu=0, sd=1),此时计算出的y值就是标准化后的height,和x轴的标准化weight尺度完全匹配
  • 统一为全原始尺度:提前保存原始weight的均值w_mean和标准差w_std,把横轴的x值逆标准化:x_original = x * w_std + w_mean,绘制时用x_original作为横轴输入,和y轴的原始height尺度匹配

问题2:后验预测值的逆标准化方案

逆转换方法

标准化的通用公式是 标准化值 = (原始值 - 变量均值) / 变量标准差,逆转换只要把公式反过来就行:

# 提前保存的原始height的均值和标准差
height_mean = df1.height.mean()
height_std = df1.height.std()
# 逆标准化
height_hat_original = height_hat * height_std + height_mean

处理位置选择

两种处理方式都可行,按需选择即可:

  • 模型内部处理:如果后续分析全量使用原始尺度,可以直接在模型中添加逆变换逻辑,采样得到的结果直接就是原始尺度,不需要额外事后处理
  • 事后处理:如果需要同时使用标准化和原始尺度的结果,事后转换更灵活,也不会增加模型的计算复杂度

标准流程

行业内通用的处理流程是:

  1. 做标准化操作时,就同步保存每个变量对应的均值、标准差参数,不要后续重新计算避免引入误差
  2. 可以封装通用的standardize和inv_standardize工具函数,传入对应参数直接完成转换,降低出错概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:06:03