2016-09-23 6 views
3

나는 Bayia 추론을 위해 Julia에서 Mamba 패키지를 사용하는 법을 배우려하고있다. 패키지는 훌륭하지만 초보자로서 문서에 약간의 정보가 부족합니다. 그래서 나는 아주 간단한 예제를 구현하는 방법을 알아 내려고 노력하고있다.Julia에서 Mamba 패키지를 사용하는 법 배우기

내가

을 시도 내가는 단 변량 정규 분포의 평균에 대한 베이지안 추론을 수행하기위한 예를 구현했습니다. 코드는 다음과 같습니다

using Mamba 

## Model Specification 

model = Model(

    x = Stochastic(1, 
    mu -> Normal(mu, 2.0), 
    false 
), 

    mu = Stochastic(
    () -> Normal(0.0, 1000.0), 
    true 
) 

) 

## Data 
data = Dict{Symbol, Any}(
    :x => randn(30)*2+13 
) 

## Initial Values 
inits = [ 
    Dict{Symbol, Any}(
    :x => data[:x], 
    :mu => randn()*1 
) 
] 

## Sampling Scheme Assignment 
scheme1 = NUTS([:mu]) 
setsamplers!(model, [scheme1]) 

sim1 = mcmc(model, data, inits, 10000, burnin=250, thin=2, chains=1); 
describe(sim1) 

이 절대적으로 잘 작동하는 것 같다 (아마도이 ​​코딩의 더 나은 방법이있을 수 있지만?).

나는 무엇을하려하고 작동하지 않습니다.

이 예에서는 이변 량 정규 분포의 평균에 대한 베이지안 추론을 시도하고 있습니다. 코드는 다음과 같습니다.

using Mamba 

## Model Specification 

model = Model(

    x = Stochastic(1, 
    mu -> MvNormal(mu, eye(2)), 
    false 
), 

    mu = Stochastic(1, 
    () -> MvNormal(zeros(2), 1000.0), 
    true 
) 

) 

## Data 
data = Dict{Symbol, Any}(
    :x => randn(2,30)+13 
) 

## Initial Values 
inits = [ 
    Dict{Symbol, Any}(
    :x => data[:x], 
    :mu => randn(2)*1 
) 
] 

## Sampling Scheme Assignment 
scheme1 = NUTS([:mu]) 
setsamplers!(model, [scheme1]) 

sim1 = mcmc(model, data, inits, 10000, burnin=250, thin=2, chains=1); 
describe(sim1) 

내가 알기로는 변경이 필요하지 않습니다. 그러나, 나는 어딘가에 뭔가 잘못하고 있는데 이걸 실행하려고하면 더 이상 도움이되지 않는 오류 (형식 오류 사이의 변환)가 발생합니다.

도움을 주시면 감사하겠습니다. 이것이 작동한다면,이 간단한 예제를 다른 새로운 사용자를위한 Mamba 문서에 제공하는 것을 고려할 것입니다. 감사.

부록 :

ERROR: MethodError: Cannot `convert` an object of type Array{Float64,2} to an object of type Array{Float64,1} 
This may have arisen from a call to the constructor Array{Float64,1}(...), 
since type constructors fall back to convert methods. 
in setinits!(::Mamba.ArrayStochastic{1}, ::Mamba.Model, ::Array{Float64,2}) at /lhome/lgiannins/.julia/v0.5/Mamba/src/model/dependent.jl:164 
in setinits!(::Mamba.Model, ::Dict{Symbol,Any}) at /lhome/lgiannins/.julia/v0.5/Mamba/src/model/initialization.jl:11 
in setinits!(::Mamba.Model, ::Array{Dict{Symbol,Any},1}) at /lhome/lgiannins/.julia/v0.5/Mamba/src/model/initialization.jl:24 
in #mcmc#29(::Int64, ::Int64, ::Int64, ::Bool, ::Function, ::Mamba.Model, ::Dict{Symbol,Any}, ::Array{Dict{Symbol,Any},1}, ::Int64) at /lhome/lgiannins/.julia/v0.5/Mamba/src/model/mcmc.jl:29 
in (::Mamba.#kw##mcmc)(::Array{Any,1}, ::Mamba.#mcmc, ::Mamba.Model, ::Dict{Symbol,Any}, ::Array{Dict{Symbol,Any},1}, ::Int64) at ./<missing>:0 
+0

뭔가를 시도 할 수 있습니다 (MU 나는)입니다 무슨 일이 일어나고 있는지 찾을 수 있도록 도와주세요. –

+0

좋은 지적. 위의 업데이트 된 게시물. – user1438310

+0

주어진 추적 목록에서 항목 중 하나에 잘못된 측정 기준이 있다고 추측 할 수 있습니까? –

답변

1

난 당신이 openned 맘바 문제에 게시 된 오류 메시지 :

data[:x] 
2x30 Array{Float64,2}: 

치수 2 ×의 행렬이기 때문에

문제입니다 30. x에 대한 확률 적 노드를 코딩 한 방법은

0123입니다.

x가 벡터 (차원 1의 다차원 배열)임을 지정합니다. 그것은 스토캐스틱 직후의 1을 의미합니다. 모델을 수학 표기법으로 작성하는 데 도움이됩니다. 왜냐하면 MvNormal은 행렬이 아닌 벡터에 분포를 정의하기 때문입니다. 아마도 모델은 X_1, ..., X_n IID MvNormal 같은 경우에 당신은 역 추적을 추가하십시오 (또는 오류 메시지 적어도) 그래서 사람이 할 수있는 것을

using Mamba 

## Model Specification 

model = Model(
    x = Stochastic(2, 
    (mu, N, P) -> 
     UnivariateDistribution[ 
     begin 
     Normal(mu[i], 1) 
     end 
     for i in 1:P, j in 1:N 
    ], 
    false 
), 
    mu = Stochastic(1, 
    () -> MvNormal(zeros(2), 1000.0), 
    true 
) 
) 

## Data 
data = Dict{Symbol, Any}(
:x => randn(2,30)+13, 
:P => 2, 
:N => 30 
) 
## Initial Values 
inits = [ 
    Dict{Symbol, Any}(
    :x => data[:x], 
    :mu => randn(2)*1 
) 
] 

## Sampling Scheme Assignment 
scheme1 = NUTS([:mu]) 
setsamplers!(model, [scheme1]) 

sim1 = mcmc(model, data, inits, 10000, burnin=250, thin=2, chains=1); 
describe(sim1) 
+0

감사합니다, bdeonovic. Mamba 문제 페이지에 대한 토론이 끝나면 여기에서 게시물을 업데이트 할 것입니다. – user1438310

+0

Github 문제에 대한 답변을 업데이트했습니다. 더 이상 질문이 있으면 알려주세요. – bdeonovic