더북(TheBook)

deterministic 래퍼는 1장의 문자 메시지 예제에서 사용해보았다. λ 모델이 어떤 모습이었는지 생각해보자.

32m-1

그리고 PyMC 코드에서는

 


import numpy as np
n_data_points = 5  # 1장에서 데이터 포인트가 70개 있었다. 

@pm.deterministic
def lambda_(tau=tau, lambda_1=lambda_1, lambda_2=lambda_2):
    out = np.zeros(n_data_points)
    out[:tau] = lambda_1  # lambda_1은 tau 이전 lambda다.
    out[tau:] = lambda_2  # lambda_2는 tau 이후 lambda다.
    return out

 

τ, λ1, λ2를 안다면 λ를 알 수 있음이 분명하다. 그러므로 λ는 deterministic 변수다.

deterministic 데코레이터 내부에서 stochastic 변수는 stochastic 변수가 아니라 스칼라나 NumPy 배열(다변량인 경우)처럼 작동한다. 예를 들어 다음 코드를 실행하면

 


@pm.deterministic
def some_deterministic(stoch=some_stochastic_var):
    return stoch.value**2

 

stochvalue 속성을 가지고 있지 않다는 것을 알려주는 AttributeError가 발생한다. 그래서 돌려주는 값은 stoch**2여야 한다. 실제로 전달되는 것은 stochastic 변수가 아니라 그 변수의 값이다.

deterministic 함수 작성 시 함수에 사용된 각 변수에 대해 키워드 인수를 사용한다. 이 단계는 필수이며, 모든 변수는 키워드 인수로 명시되어야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.