2013-12-22 2 views
0

나는 여러 개의 혹이있는 분포를 가지고 있습니다. 가트, 가우스, 지수, weibuill 등등에 배포판의 여러 가지 유형을 피팅 해보고 싶습니다. 그러나 그것은 그대로 각 조합에 대해 확률적인 클래스를 수동으로 정의해야하는 것으로 보입니다. 내가 뭘하고 싶은지pymc의 일반 혼합물 모델

@stochastic(model_a, model_b, observed=True) 
def mixture(value=observed_time_series, model_a_parameters, model_b_parameters, p): 
    def logp(value, model_a_parameters, model_b_parameters): 
     return p*model_a.logp(value, *model_a_parameters) + (1-p)*model_b.logp(value, *model_b_parameters) 
    def random(model_a_parameters, model_b_paramters, ratio): 
     if(random() < ratio): 
      return model_a.random() 
     return model_b.random() 

이런 위임이 가능합니까? 이것을하기위한 표준 방법이 있습니까? 위와 같은 것을 막을 수있는 주요한 일은 변수 세트를 함께 그룹화하는 방법을 생각할 수 없다는 것입니다.

답변

1

올바른 길을 가고 있습니다.

@observed 
def mixture(...): 
    ... 

는 또한, 당신은 단지 당신이 가능성에서 샘플을해야하는 경우 random을 정의해야합니다 : 귀하의 stochastic 장식은 단순히 단순화 할 수있다.

혼합물을 모델링하는 또 다른 접근법은 잠재적 인 변수 모델을 사용하는 것입니다. 여기서 잠재적인 변수 모델은 개별 관측치가 어떤 분포에서 파생되는지를 나타내는 지표를 사용하는 것입니다. 이 지표는 예를 들어 범주 형 분포로 모델링 할 수 있습니다. 그러면 이전에 Dirichlet을 가질 수 있습니다.