본문 바로가기

IT&컴퓨터

확률 프로그래밍 API PyMC->PyMC3, 달라진 문법

베이지안 분석을 공부하기 위해 책 사서 공부하는 중, 책에서는 pymc로 설명된 것이, pymc3에서 문법이 달라져서, 에러 메시지를 발생시키는 것을 볼 수 있었다. pymc를 설치할 수 없는 상황이라..

 

기존에 pymc에서

 

lambda_1 = pm.Exponential('lambda_1', alpha) 
lambda_1 = pm.Exponential('lambda_2', alpha)

 

으로 사용해왔다면...

 

pymc3에서 그대로 사용하면 

 

"TypeError: No model on context stack, which is needed to instantiate distributions. Add variable inside a 'with model:' block, or use the '.dist' syntax for a standalone distribution." 

 

이런 에러 메시지가 뜬다.

 

그래서 구글링으로 한참을 검색해봤는데, 이 문법은 pymc3에서는 이렇게 바뀌었다는 것을 알 수 있다.

 

with pm.Model() as model:
    lambda_1 = pm.Exponential('lambda_1', alpha)
    lambda_1 = pm.Exponential('lambda_2', alpha)

 

이렇게 문법을 바꾸면 정상 작동한다. 파이썬 2->3으로 바뀌면서 나타난 현상이기도 하지만..

파이썬 API, 라이브러리 같은 경우, 버전이 올라가면 문법이 바뀌는 경우가 종종 있다.

친절한 설명을 바라기도 어려울 수도 있고...

 

그래서 혹여나 나나 뒷사람에게 참고가 되도록, 이렇게 블로그를 써본다.