多项式的狄利克雷先验

机器算法验证 贝叶斯 多项分布 狄利克雷分布 共轭先验
2022-03-24 20:07:10

Dirichlet 函数是多项式的共轭先验。所以后验也是狄利克雷给出的一些观察结果。
例如,如果我从 17 次试验中观察到计数(第 1 类为 10,第 2 类为 3,第 3 类为 4)。 假设一个非信息性先验,浓度参数等于,后 Dirichlet 应该有浓度参数(据我所知)。X=(10,3,4)
α(1.,1.,1.)αpost=(11.,4.,5.)

的多项式中抽取大量样本,则得到的样本概率的最大似然估计量与观测值 mle 的 mle 不同。(见下面的代码)。αpost

我不明白为什么:后 Dirichlet alpha 是否由以下公式给出: 在我的模拟中,这似乎是正确的答案。

(α0+X01,α1+X11,,α2+X21)

import numpy as np
import scipy.stats
#observations:    
x = np.array([ 10., 3., 4.])

# posterior concentration parameters for Dirichlet
# with uninformative prior, i.e. concentration parameters [1,1,1]
a = x + 1
a = x

# simulate 
nb_samples = 200000
d = scipy.stats.dirichlet.rvs(a, nb_samples)
c_ = np.ndarray(nb_samples)
# without a loop possible??
for i in range(nb_samples):
    c_[i] = np.random.choice(3, 1, p=d[i])

nbs = float(nb_samples) 
counts = np.bincount(c_.astype(int))
print "concentration parameter of the Dirichlet:", a
print "simulation sample probabilities (mle)", counts /nbs
print "observation mle probabilities:", x/float(x.sum())


>concentration parameter of the Dirichlet: [ 11.   4.   5.]
>simulation sample probabilities (mle) [ 0.550255  0.198655  0.25109 ]
>observation mle probabilities: [ 0.58823529  0.17647059  0.23529412]

>concentration parameter of the Dirichlet: [ 10.   3.   4.]
>simulation sample probabililities (mle) [ 0.58836  0.17733  0.23431]
>observation mle probabilities: [ 0.58823529  0.17647059  0.23529412]
1个回答

我不认为这与狄利克雷先验或后验的错误定义有任何关系:简单地说,当 (x_1,\ldots,x_k)\sim\mathcal{D}(\alpha_1,... ,平均值由 ,它解释了与 MLE 的差异。

(x1,,xk)D(α1,...,αk)
E[(x1,,xk)]=(α1,...,αk)i=1kαi

>c(11.,4.,5.)/sum(c(11.,4.,5.))
[1] 0.55 0.20 0.25
> c(10.,3.,4.)/sum(c(10.,3.,4.))
[1] 0.5882353 0.1764706 0.2352941

如果改为使用 Dirichlet 分布的模式,则 恢复 MLE。这是完全有道理的,因为 MAP 是平坦先验下的 MLE。

(x1mode,,xkmode)=(α11,...,αk1)i=1kαik