我正在使用PRTools MATLAB库来训练一些分类器,生成测试数据和测试分类器。
我有以下详情:
我想这样做:
计算并绘制未分类错误分类概率(表示为q)的贝叶斯后验分布,即作为q本身的概率密度函数(因此,P(q)将在q上绘制,从0到1)
我有(数学公式,而不是matlab代码!):
Posterior = Likelihood * Prior / Normalization constant =
P(q|k,N) = P(k|q,N) * P(q|N) / P(k|N)
先验设置为1,因此我只需要计算似然和归一化常数。
我知道可能性可以表示为(其中B(N,k)是二项式系数):
P(k|q,N) = B(N,k) * q^k * (1-q)^(N-k)
...因此,归一化常数只是上面后面的一个整数,从0到1:
P(k|N) = B(N,k) * integralFromZeroToOne( q^k * (1-q)^(N-k) )
(二项式系数(B(N,k))可以省略,因为它出现在似然和归一化常数中)
现在,我听说归一化常数的积分应该可以计算为一系列......如:
k!(N-k)! / (N+1)!
这是对的吗? (我有一些关于这个系列的讲义,但无法弄清楚它是用于归一化常数积分,还是用于错误分类(q)的整体分布)
此外,欢迎提示如何实际计算这个? (因子很容易造成截断误差吗?)......和,如何实际计算最终的图(q上的后验分布,从0到1)。
答案 0 :(得分:1)
我真的没有做过贝叶斯后验分布(并且暂时没有),但我会尝试帮助你所给予的。首先,
k!(N-k)! / (N+1)! = 1 / (B(N,k) * (N + 1))
并且您可以使用nchoosek()在Matlab中计算二项式系数,尽管它在文档中说大型系数可能存在准确性问题。 N和k有多大?
其次,根据Mathematica,
integralFromZeroToOne( q^k * (1-q)^(N-k) ) = pi * csc((k-N)*pi) * Gamma(1+k)/(Gamma(k-N) * Gamma(2+N))
其中csc()
是cosecant函数,Gamma()
是gamma function。但是,Gamma(x)=(x-1)!我们马上就会用到它。问题是我们底部有一个函数Gamma(k-N),而k-N将是负数。但是,reflection formula会帮助我们,以便最终得到:
= (N-k)! * k! / (N+1)!
显然,你的笔记是正确的。
答案 1 :(得分:0)
让q
成为错误分类的概率。那么您在k
次运行中观察N
错误分类的概率由下式给出:
P(k | N,q)= B(N,k)q ^ k(1-q)^(N-k)
然后你需要为q
假设一个合适的先验,它在0和1之间。上面的共轭前缀是β分布。如果q ~ Beta(a,b)
那么后验也是Beta分布。对于您的信息,后方是:
f(q | - )~Beta(a + k,b + N-k)
希望有所帮助。