gpt4 book ai didi

python - PyMC 中的负二项式混合

转载 作者:行者123 更新时间:2023-11-30 23:22:28 29 4
gpt4 key购买 nike

我正在尝试将负二项式混合物与 PyMC 拟合。看来我做错了什么,因为预测看起来与输入数据并不相似。问题可能出在负二项式参数的先验上。有什么建议吗?

    from sklearn.cluster import KMeans
import pymc as mc
n = 3 #Number of components of the mixture
ndata = len(data)

dd = mc.Dirichlet('dd', theta=(1,)*n)
category = mc.Categorical('category', p=dd, size=ndata)

kme = KMeans(n) # This is not needed but it is to help convergence
kme.fit(data[:,newaxis])
alphas = mc.TruncatedNormal('alphas', kme.cluster_centers_[:,0], 0.1, a=0. ,b=100000 ,size=n)
means = mc.TruncatedNormal('means', kme.cluster_centers_[:,0],0.1,a=0.0 ,b=100000, size=n)

@mc.deterministic
def mean(category=category, means=means):
return means[category]

@mc.deterministic
def alpha(category=category, alphas=alphas):
return alphas[category]

obs = mc.NegativeBinomial('obs', mean, alpha, value=data, observed = True)

predictive = mc.NegativeBinomial('predictive', mean, alpha)

model = mc.Model({'dd': dd,
'category': category,
'alphas': alphas,
'means': means,
'predictive':predictive,
'obs': obs})

mcmc = mc.MCMC( model )
mcmc.sample( iter=n_samples, burn=int(n_samples*0.7))

最佳答案

您已经正确实现了三个分布混合的贝叶斯估计,但 MCMC 模型给出了错误的值。

问题是 category收敛速度不够快,means中的参数, alphas ,和dd逃离之前的良好值(value)观category决定哪些点属于哪个分布。

data = np.atleast_2d(list(mc.rnegative_binomial(100., 10., size=s)) +
list(mc.rnegative_binomial(200., 1000., size=s)) +
list(mc.rnegative_binomial(300., 1000., size=s))).T
nsamples = 10000

您可以看到 category 的后验想象一下是错误的:

G = [data[np.nonzero(np.round(mcmc.trace("category")[:].mean(axis=0)) == i)]
for i in range(0,3) ]
plt.hist(G, bins=30, stacked = True)

category posteriors of the input data, no initialization

期望最大化是稳定潜在变量的经典方法,但您也可以使用快速和肮脏的 k 均值拟合的结果来为 MCMC 提供初始值:

category = mc.Categorical('category', p=dd, size=ndata, value=kme.labels_)

然后估计值会收敛到看起来合理的值。

category posteriors using kmeans to initialize

对于您之前的 alpha 版本,您可以对所有这些使用相同的分布:

alphas = mc.Gamma('alphas', alpha=1, beta=.0001 ,size=n)

这个问题并不特定于负二项分布;正态分布的狄利克雷混合也会以同样的方式失效;这是由于 MCMC 无法有效优化高维分类分布而导致的。

关于python - PyMC 中的负二项式混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24475293/

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