poster
2019-12-10, 20:41
我正在使用PRTools (http://prtools.org/) 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) 将priority设置为1,所以我只需要计算似然和归一化常数。
我知道可能性可以表示为(其中B(N,k)是二项式系数):
P(k|q,N) = B(N,k) * q^k * (1-q)^(Nk) ...因此归一化常数只是上述后验的整数,范围是0到1:
P(k|N) = B(N,k) * integralFromZeroToOne( q^k * (1-q)^(Nk) ) (尽管二项式系数(B(N,k))在似然性和归一化常数中都可以忽略不计)
现在,我听说归一化常数的积分应该能够按序列计算...类似于:
k!(Nk)! / (N+1)! 那是对的吗? (我在本系列中有一些讲义,但是无法弄清楚它是用于归一化常数积分还是用于错误分类的整体分布(q))
另外,欢迎提示如何实际计算呢? (阶乘容易造成截断错误吗?)...,以及如何实际计算最终图(q上的后验分布,从0到1)。
回答:
我确实对贝叶斯后验分布没有做太多(并且有一段时间没有做),但是我会尽力帮助您给出的结果。第一,
k!(Nk)! / (N+1)! = 1 / (B(N,k) * (N + 1)) 并且您可以使用nchoosek()在Matlab中计算二项式系数,尽管它确实在文档中指出大系数可能存在精度问题。 N和k多大?
其次,根据Mathematica,
integralFromZeroToOne( q^k * (1-q)^(Nk) ) = pi * csc((kN)*pi) * Gamma(1+k)/(Gamma(kN) * Gamma(2+N)) 其中csc()是余割函数,而Gamma()是gamma函数 (http://en.wikipedia.org/wiki/Gamma_function) 。但是,Gamma(x)=(x-1)!我们将在稍后使用。问题是我们在底部有一个函数Gamma(kN),而kN将为负。但是, 反射公式 (http://www.efunda.com/math/gamma/index.cfm)将帮助我们实现这一目标,从而使我们最终得到:
= (Nk)! * k! / (N+1)! 显然,您的笔记是正确的。
更多&回答... (https://stackoverflow.com/questions/2908923)
我有以下详细信息:
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) 将priority设置为1,所以我只需要计算似然和归一化常数。
我知道可能性可以表示为(其中B(N,k)是二项式系数):
P(k|q,N) = B(N,k) * q^k * (1-q)^(Nk) ...因此归一化常数只是上述后验的整数,范围是0到1:
P(k|N) = B(N,k) * integralFromZeroToOne( q^k * (1-q)^(Nk) ) (尽管二项式系数(B(N,k))在似然性和归一化常数中都可以忽略不计)
现在,我听说归一化常数的积分应该能够按序列计算...类似于:
k!(Nk)! / (N+1)! 那是对的吗? (我在本系列中有一些讲义,但是无法弄清楚它是用于归一化常数积分还是用于错误分类的整体分布(q))
另外,欢迎提示如何实际计算呢? (阶乘容易造成截断错误吗?)...,以及如何实际计算最终图(q上的后验分布,从0到1)。
回答:
我确实对贝叶斯后验分布没有做太多(并且有一段时间没有做),但是我会尽力帮助您给出的结果。第一,
k!(Nk)! / (N+1)! = 1 / (B(N,k) * (N + 1)) 并且您可以使用nchoosek()在Matlab中计算二项式系数,尽管它确实在文档中指出大系数可能存在精度问题。 N和k多大?
其次,根据Mathematica,
integralFromZeroToOne( q^k * (1-q)^(Nk) ) = pi * csc((kN)*pi) * Gamma(1+k)/(Gamma(kN) * Gamma(2+N)) 其中csc()是余割函数,而Gamma()是gamma函数 (http://en.wikipedia.org/wiki/Gamma_function) 。但是,Gamma(x)=(x-1)!我们将在稍后使用。问题是我们在底部有一个函数Gamma(kN),而kN将为负。但是, 反射公式 (http://www.efunda.com/math/gamma/index.cfm)将帮助我们实现这一目标,从而使我们最终得到:
= (Nk)! * k! / (N+1)! 显然,您的笔记是正确的。
更多&回答... (https://stackoverflow.com/questions/2908923)