2014-02-12 3 views
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); 
+1

초기 오류는 NaN 값이 포함 된 것으로 보입니다. 두 열 모두에서 NaN을 제외하도록 프레임을 자릅니다. 그리고 약간은 달렸지 만 일종의 Theano 오류가 있습니다. 지금은 감탄하고 있습니다 .... /usr/local/lib/python2.7/dist-packages/theano/scan_module/scan_perform_ext.py:85 : RuntimeWarning : numpy.ndarray 크기가 변경되었습니다. 바이너리 비 호환성을 나타낼 수도 있습니다 from scan_perform.scan_perform import * The Git 버전의 Theano도 가져와야하는지 궁금합니다. – dartdog

+0

코드는 % matplotlib 인라인 Doh 추가와 함께 작동합니다! – dartdog

답변

1

이 작동 :

df2=df2[1:-1]   <<<< gets rid of NaN from example data 
df2 
%matplotlib inline 
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); 

다시 많은 감사를 @fonnesbeck!