gpt4 book ai didi

python - PyMC3:相同输入的不同预测

转载 作者:行者123 更新时间:2023-12-03 19:20:58 24 4
gpt4 key购买 nike

在 PyMC3 中,单个新观察通过 set_data() sample_posterior_predictive() 当前未正确处理,在这种情况下,它会预测训练数据(参见 #3640)。因此,我决定在我的输入数据中添加与第一个相同的第二个人工行,以绕过此行为。

现在,我偶然发现了一些我目前无法理解的东西:第一行和第二行的预测不同。用常数 random_seed ,我原以为这两个预测是相同的。任何人都可以请 (i) 确认这是预期的行为而不是错误,如果是这样,(ii) 解释为什么 sample_posterior_predictive()为一个和相同的输入数据创建不同的结果?

这是一个基于 iris 数据集的可重现示例,其中花瓣宽度和长度分别用作预测器和响应,除最后一行之外的所有内容都用于训练。该模型随后针对最后一行进行测试。 pd.concat()用于复制测试数据帧的第一行,以规避上述bug。

import seaborn as sns
import pymc3 as pm
import pandas as pd
import numpy as np


### . training ----

dat = sns.load_dataset('iris')
trn = dat.iloc[:-1]

with pm.Model() as model:
s_data = pm.Data('s_data', trn['petal_width'])
outcome = pm.glm.GLM(x = s_data, y = trn['petal_length'], labels = 'petal_width')
trace = pm.sample(500, cores = 1, random_seed = 1899)


### . testing ----

tst = dat.iloc[-1:]
tst = pd.concat([tst, tst], axis = 0, ignore_index = True)

with model:
pm.set_data({'s_data': tst['petal_width']})
ppc = pm.sample_posterior_predictive(trace, random_seed = 1900)

np.mean(ppc['y'], axis = 0)
# array([5.09585088, 5.08377112]) # mean predicted value for [first, second] row

最佳答案

我不认为这是一个错误,我也不觉得它令人不安。由于 PyMC3 不检查被预测的点是否相同,它单独处理它们,并且每个点都会从模型中随机抽取。虽然每次 PPC 绘制(ppc['y'] 中的行)都使用相同的随机参数设置用于从跟踪中获取的 GLM,但该模型仍然是随机的(即,始终存在测量误差)。我认为这解释了差异。

如果增加 PPC 中的抽奖次数,您会看到均值的差异减小,这与这只是抽样差异一致。

关于python - PyMC3:相同输入的不同预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59288938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com