2015-01-09 4 views
2

PyMC에서 @stserasit 변수를 @observed 변수로 전환하는 데 약간의 문제가 있습니다. 나는 아래와 같이 확률 변수를 설정했습니다 :PyMC @ 관측 된 데코레이터가 log-probability를 플로트 오류로 변환 할 수 없습니다.

def age_logp(age): 
    if age < 0 or age > 110: 
     return -np.inf 
    elif 0 <= age < 20: 
     prob = age_dist['0-20'] 
    elif 20 <= age < 40: 
     prob = age_dist['20-40'] 
    elif 40 <= age < 60: 
     prob = age_dist['40-60'] 
    elif 60 <= age < 80: 
     prob = age_dist['60-80'] 
    elif age >= 80: 
     prob = age_dist['80-inf'] 
    return np.log(prob) 


@pymc.stochastic 
def age(value=0): 
    def logp(value): 
     return age_logp(value) 

어떻게 이것을 관측 변수로 전환합니까?

@pymc.observed 
def age(value=np.array([12, 43, 28, 39, 87, 26])): 
    return map(age_logp, value) 

하지만 내가 age는 관측 값의 배열을 취할 연장하려면 어떻게

TypeError: age: computed log-probability [-1.639897119918809, -1.3394107752210402, -1.0876723486297752, -1.0876723486297752, -3.1235656450638758, -1.0876723486297752] cannot be cast to float를 얻을 : 나는 지금까지 시도했습니다?

답변

3

당신은 일을 바로 전환했습니다,하지만 당신은 독립적으로 여러 관측 값을 모델링하려는 경우, 당신은 공동 로그 우도에이를 더할 수 있습니다

@pymc.observed 
def age(value=np.array([12, 43, 28, 39, 87, 26])): 
    return sum(map(age_logp, value)) 

당신은 그들에게 다른 방법으로 경우를 결합 할 수 있습니다 너는 선호한다. 열쇠는 age이 스칼라 값을 반환해야한다는 것입니다.

+1

이해가 안됩니다 ... 왜 추가 할 수 있습니까? – Delosari