2

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

我有以下详细信息:

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

我想要做:

计算并绘制未知错误分类概率的贝叶斯后验分布(表示为 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)。

4

2 回答 2

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()是余割函数,Gamma()gamma 函数。然而,伽玛(x)=(x-1)!我们稍后会用到。问题是我们在底部有一个函数 Gamma(kN),kN 将是负数。但是,反射公式将帮助我们解决这个问题,因此我们最终得到:

= (N-k)! * k! / (N+1)!

显然,你的笔记是正确的。

于 2010-05-25T23:57:01.850 回答
0

q是错误分类的概率。k然后,您在运行中观察到错误分类的概率N由下式给出:

P(k|N,q) = B(N,k) q^k (1-q)^(Nk)

然后,您需要假设一个合适的先验,q其范围在 0 和 1 之间。上述的共轭先验是 beta 分布。如果q ~ Beta(a,b)那么后验也是一个 Beta 分布。为了您的信息,后部是:

f(q|-) ~ Beta(a+k,b+Nk)

希望有帮助。

于 2010-05-26T00:49:50.853 回答