首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyMC多元线性回归

PyMC多元线性回归
EN

Stack Overflow用户
提问于 2014-04-08 06:21:06
回答 1查看 738关注 0票数 1

我在试着把几条线放到同一个截获的地方。

代码语言:javascript
复制
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 :我试着对sigma使用指数先验分布,但结果并不好。

EN

回答 1

Stack Overflow用户

发布于 2014-04-10 20:37:57

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

代码语言:javascript
复制
MCMClinear = pymc.MCMC( model)
MCMClinear.sample(10000,burn=5000,thin=5)
linear_output=MCMClinear.stats()

为此打印linear_output可以非常准确地推断参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22924178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档