scipy:评估贝叶斯网络最可能的价值和信心

时间:2013-06-03 18:20:45

标签: numpy scipy

我有两个先验分布(A和B)和一个后验分布(C | A,B)的贝叶斯网络。我是如何在scipy中找到最可能的C值?

其次,我如何计算该值的置信水平?我将置信水平定义为等于C的实际值等于或大于给定值的概率。

更具体地说,A和B是x的累积概率函数(cdf)。给定特定的a,A(a),给出A的实际值小于a的概率。

类似地,C是a,b,c的函数,并且在给定A和B的特定值的情况下,返回C的实际值小于c的概率。

1 个答案:

答案 0 :(得分:2)

您需要使用概率密度函数(PDF)而不是CDF。您只需通过区分它就可以从CDF获取PDF(如果函数列表,则以数字方式执行)。请注意你指定它的方式,取你的衍生物 关于CDF(c | a, b)的{​​{1}}为您提供了条件概率密度c

要获得p(c|a,b)的边际分布,您需要整合c

a,b

现在您可以计算分布[b_min, b_max]=[-10.0, 10.0] # whatever the reasonable bound in b are [a_min, a_max]=[-10.0,10.0] # whatever the reasonable bounds in a are def pc_conditional( c, a,b ): ''' conditional probability density p(c|a,b)''' ... def pa(a): ''' probability density p(a)''' .... def pb(b): ''' probability density p(b)''' ... def joint_distribution( c, a,b ): ''' joint distribution over all variables; p(c,a,b)=p(c|a,b)p(a)p(b) ''' return pc_conditional(c,a,b)*pa(a)*pb(b) def pca_marginal( c, a ): ''' distribution over c,a after integrating out b; p(c,a)=integrate[ p(c,a,b)db] ''' def integrand( b ): return joint_distribution( c,a ,b) return scipy.integrate.quad( integrand, b_min, b_max) def pc_marginal(c): def integrand(a): return pca_marginal( c, a ) return scipy.integrate.quad( integrand, a_min, a_max ) # You can all pc_marginal(c) to obtain the (marginal) probability # density value for the selected value of c. You could use vectorize # to allow for calling it with an array of values. ,您可以计算您喜欢的任何统计信息。