1
繼續使用this example做相當簡單的貝葉斯線性迴歸使用PYMC3(學習,我希望)我得到的初始示例運行,但然後嘗試使用我自己的數據,並得到:Pymc線性迴歸開始問題(縮放輸入參數?)
ValueError: Optimization error: max, logp or dlogp at max have non-finite values.
Some values may be outside of distribution support. max: {'alpha': array(50000.0),
'beta': array(50000.0), 'sigma': array(25000.0)} logp: array(nan) dlogp: array([ nan,
nan, nan])Check that 1) you don't have hierarchical parameters, these will lead to
points with infinite density. 2) your distribution logp's are properly specified.
Specific issues:
這是可疑的是由於我的數據範圍,但它可能是我不明白其他參數。數據和代碼如下:這應該只是運行在我希望的IPython筆記本上。該lastqu應該預測單元,當一切都說過和做過..
import pandas as pd
import io
content2 = '''\
Units lastqu
2000-12-31 19391 NaN
2001-12-31 35068 5925
2002-12-31 39279 8063
2003-12-31 47517 9473
2004-12-31 51439 11226
2005-12-31 59674 11667
2006-12-31 58664 14016
2007-12-31 55698 13186
2008-12-31 42235 11343
2009-12-31 40478 7867
2010-12-31 38722 8114
2011-12-31 36965 8361
2012-12-31 39132 8608
2013-12-31 43160 9016
2014-12-31 NaN 9785
'''
df2 = pd.read_table(io.BytesIO(content2))
#make sure that the columns are int, it is all a DataFrame
df2['Units']=df2['Units'][:-1].astype('int')
df2['lastqu']=df2['lastqu'][1:].astype('int')
df2
我試着型號代碼:
import pymc as pm
#import numpy as np
x=df2['lastqu'] <<<< my best guess as to how to specify my data
y=df2['Units']
trace = None
with pm.Model() as model:
alpha = pm.Normal('alpha', mu=0, sd=20)
beta = pm.Normal('beta', mu=0, sd=20)
sigma = pm.Uniform('sigma', lower=0, upper=50000)
y_est = alpha + beta * x
likelihood = pm.Normal('y', mu=y_est, sd=sigma, observed=y)
start = pm.find_MAP()
step = pm.NUTS(state=start)
trace = pm.sample(2000, step, start=start, progressbar=False)
pm.traceplot(trace);
最初的錯誤,它似乎是我包含NaN值,我削減框架以排除NaN在這兩列。它跑了一下,但得到了一些Theano錯誤,我現在正在欣賞...... /usr/local/lib/python2.7/dist-packages/theano/scan_module/scan_perform_ext.py:85:RuntimeWarning :numpy.ndarray大小已更改,可能表示來自scan_perform.scan_perform的二進制不兼容 import *想知道是否需要訪問Theano的Git版本? – dartdog
代碼適用於添加%matplotlib inline Doh! – dartdog