如何在PyMC3中正确定义Beta分布的混合体

2024-04-27 14:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用两个Beta分布的混合来拟合数据(我不知道每个分布的权重),使用Mixturefrom{a1}。代码如下:

model=pm.Model()
with model:
    alpha1=pm.Uniform("alpha1",lower=0,upper=20)
    beta1=pm.Uniform("beta1",lower=0,upper=20)
    alpha2=pm.Uniform("alpha2",lower=0,upper=20)
    beta2=pm.Uniform("beta2",lower=0,upper=20)
    w=pm.Uniform("w",lower=0,upper=1)
    b1=pm.Beta("B1",alpha=alpha1,beta=beta1)
    b2=pm.Beta("B2",alpha=alpha2,beta=beta2)
    mix=pm.Mixture("mix",w=[1.0,w],comp_dists=[b1,b2])

运行此代码后,我得到以下错误:AttributeError: 'list' object has no attribute 'mean'。有什么建议吗?在


Tags: 代码alphamodeluniformupperlowerb2beta
1条回答
网友
1楼 · 发布于 2024-04-27 14:25:27

PyMC3附带了一个^{}模块,其中包含有用的示例。通过在目录中搜索单词“mixed”,我遇到了this example

Mixture('x_obs', w,
        [Normal.dist(mu[0], tau=tau[0]), Normal.dist(mu[1], tau=tau[1])],
        observed=self.norm_x)

注意,调用了classmethod ^{}。在google上搜索“pymc3 dist classmethod”可以得到这个doc page,它解释了

... each Distribution has a dist class method that returns a stripped-down distribution object that can be used outside of a PyMC model.

除此之外,我还不完全清楚为什么这里需要精简的分布,但它似乎有效:

^{pr2}$

注意,当使用dist类方法时,名称字符串被省略。在

相关问题 更多 >