0

我有一个带有多个驼峰的分布。我想尝试为每个驼峰、高斯、指数、weibuill 等拟合几种不同类型的分布。但是,就目前而言,我似乎必须为每个组合手动定义一个随机类。我想做的是

@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()

这样的委托可以吗?有没有标准的方法来做到这一点?阻止上述情况的主要事情是我想不出任何方法将变量集组合在一起。

4

1 回答 1

1

你在正确的轨道上。您的stochastic装饰器可以简单地简化为:

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

此外,您只需要定义random是否需要从可能性中采样。

对混合物建模的另一种方法是使用潜在变量模型,其中单个观察具有对应于它们来自哪个分布的指标。例如,这些指标可以用分类分布建模。然后这可以有一个 Dirichlet 先验,等等。

于 2013-12-29T18:23:03.137 回答