用MATLAB中的PRTools计算未知误分类的后验分布

时间:2010-05-25 22:14:46

标签: matlab machine-learning bayesian

我正在使用PRTools MATLAB库来训练一些分类器,生成测试数据和测试分类器。

我有以下详情:

  • N:测试示例总数
  • k:#of 每个人的错误分类 分类器和类

我想这样做:

计算并绘制未分类错误分类概率(表示为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)。

2 个答案:

答案 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)

希望有所帮助。