gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:46:50 25 4
gpt4 key购买 nike

我正在尝试使用 PyMC3 中的 Mixture 使用两个 Beta 分布的混合来拟合数据(我不知道每个分布的权重) 。这是代码:

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'。有什么建议吗?

最佳答案

PyMC3 附带 pymc3.tests包含有用示例的模块。通过在该目录中搜索“混合物”一词,我发现了 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 dist叫做。谷歌搜索“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.

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

import pymc3 as pm

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.dist(alpha=alpha1, beta=beta1)
b2 = pm.Beta.dist(alpha=alpha2, beta=beta2)
mix = pm.Mixture("mix", w=[1.0, w], comp_dists=[b1, b2])

请注意,使用 dist 类方法时,会省略名称字符串。

关于python - 如何在 PyMC3 中正确定义 Beta 分布的混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46174953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com