无法在我的简单多项式拟合程序中收敛。 我将举例说明' a'参数如下。 他们唯一可以想到的是,因为我使用了对数数据,并且对数可能性导致了问题? 我对此很陌生,我不确定。因此,我在这里指导我的问题。
这是我正在运行的代码:
y=vc
x=vt
y=np.asarray(y)
x=np.asarray(x)
z = np.polyfit(x, y, 2) # the traditional chi-square fit
print 'The chi-square result: ', z
#The chi-square result: [ -0.63802271 5.83847593 -13.24021273]
#priors
sig = pymc.Uniform('sig', 0, 100, value=1)
a = pymc.Uniform('a', -100, 100,value=0)
b = pymc.Uniform('b', -100, 100,value=0)
c = pymc.Uniform('c', -100, 100,value=0)
#model
@pymc.deterministic(plot=False)
def mod_quadratic(x=x, a=a, b=b, c=c):
return a*x**2 + b*x + c
#likelihood
y = pymc.Normal('y', mu=mod_quadratic, tau=1.0/sig**2, value=y, observed=True)
我有对数x和y值作为输入,我适合一个简单的x ** 2多项式。
我保持输入文件适度:
import pymc,v
# load the model file
import numpy as np
import matplotlib.pyplot as plt
R = pymc.MCMC(v) # build the model
R.sample(iter=100000,burn=20000,thin=100) # populate and run it
print 'a ', R.a.value # print outputs
print 'b ', R.b.value
print 'c ', R.c.value
print 'a ', R.a.stats()
print 'b ', R.b.stats()
print 'c ', R.c.stats()
跟踪不会收敛。如果我使用非对数数据,则跟踪收敛,但由于多项式不适合非对数数据,因此拟合是不可接受的。
sig trace window b trace window
为了节省空间,我只包含了b轨迹,但它们显示的是相同的非会聚。
有人看到我的缺陷吗?我确定我在这里做错了什么..
由于