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

PyMC5贝叶斯回归样本外预测适配问题求助

PyMC5 样本外预测适配方案

修改模型代码,引入 pm.MutableData

核心是将静态特征数据替换为pm.MutableData容器,这样后续可以动态替换为新的样本外数据:

import pandas as pd
import pymc as pm

# 假设你的特征列名是['f1', 'f2'],target是目标列名
features = ['f1', 'f2']
target = df['target'].values
basic_model = pm.Model()

with basic_model:
    # 用MutableData包裹每个特征,方便后续替换数据
    feature_vars = {}
    for f in features:
        feature_vars[f] = pm.MutableData(f'feature_{f}', df[f].values)
    
    response_mean = []
    for f in features:
        ff = feature_vars[f]
        beta = pm.HalfNormal(f'coeff_{f}', sigma=2)
        decay = pm.Beta(f'decay_{f}', alpha=3, beta=3)
        # 修复原代码语法错误:补全括号
        contribution = pm.Deterministic(f'contribution_{f}', ff * decay * beta)
        response_mean.append(contribution)
    
    sigma = pm.HalfNormal('sigma', sigma=1)
    likelihood = pm.Normal("likelihood", mu=sum(response_mean), sigma=sigma, observed=target)

# 训练模型(和原代码逻辑一致)
with basic_model:
    idata = pm.sample(return_inferencedata=True, tune=1000)

执行样本外预测

准备好新的特征数据后,通过pm.set_data替换模型中的特征值,再生成预测分布:

# 示例:构造新的样本外数据
new_data = pd.DataFrame({
    'f1': [1.2, 3.4],  # 新的f1特征值
    'f2': [5.6, 7.8]   # 新的f2特征值
})

with basic_model:
    # 更新MutableData为新数据
    pm.set_data({f'feature_{f}': new_data[f].values for f in features})
    # 基于训练好的参数生成后验预测样本
    idata_pred = pm.sample_posterior_predictive(idata, extend_inferencedata=True)

# 查看预测结果:计算每个新样本的平均预测值
print(idata_pred.posterior_predictive['likelihood'].mean(dim=['chain', 'draw']))

关键说明

  • pm.MutableData是PyMC5中实现动态数据替换的核心容器,替代了PyMC3的pm.Data功能
  • 替换数据时,新特征的维度需与训练时保持一致(支持单样本或多样本预测)
  • sample_posterior_predictive生成的是完整的预测分布,而非单一预测值,能反映预测的不确定性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:57:42