gpt4 book ai didi

python - PyMC 多元线性回归

转载 作者:太空宇宙 更新时间:2023-11-03 18:27:28 26 4
gpt4 key购买 nike

我正在尝试拟合共享相同截距的多条线。

import numpy as np
import pymc

# Observations
a_actual = np.array([[2., 5., 7.]]).T
b_actual = 3.
t = np.arange(100)
obs = np.random.normal(a_actual * t + b_actual)


# PyMC Model
def model_linear():
b = pymc.Uniform('b', value=1., lower=0, upper=200)

a = []
s = []
r = []
for i in range(len(a_actual)):
s.append(pymc.Uniform('sigma_{}'.format(i), value=1., lower=0, upper=100))
a.append(pymc.Uniform('a_{}'.format(i), value=1., lower=0, upper=200))
r.append(pymc.Normal('r_{}'.format(i), mu=a[i] * t + b, tau=1/s[i]**2, value=obs[i], observed=True))

return [pymc.Container(a), b, pymc.Container(s), pymc.Container(r)]

model = pymc.Model(model_linear())
map = pymc.MAP(model)
map.fit()
map.revert_to_max()

计算出的 MAP 估计值与实际值相差甚远。这些值对 sigmasa 的下限和上限以及 a 的实际值也非常敏感(例如 a = [.2, .5, .7] 会给我很好的估计)或进行回归的行数。

这是执行线性回归的正确方法吗?

ps:我尝试对 sigmas 使用指数先验分布,但结果并没有更好。

最佳答案

我认为使用 MAP 可能不是您最好的选择。如果您能够进行适当的采样,请考虑将示例代码的最后 3 行替换为

MCMClinear = pymc.MCMC( model)
MCMClinear.sample(10000,burn=5000,thin=5)
linear_output=MCMClinear.stats()

为此打印线性输出可以为参数提供非常准确的推断。

关于python - PyMC 多元线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22924178/

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