1

2 つの事前分布 (A と B) と 1 つの事後分布 (C|A,B) のベイジアン ネットワークがあります。scipy で、C の最も可能性の高い値を見つけるにはどうすればよいですか?

次に、その値の信頼水準をどのように計算しますか? 信頼水準は、C の実際の値が指定された値以上である確率と等しくなるように定義します。

より具体的には、A と B は x の累積確率関数 (cdf) です。特定の a が与えられた場合、A(a) は、A の実際の値が a より小さい確率を示します。

同様に、C は a、b、c の関数であり、A と B の特定の値が与えられた場合に、C の実際の値が c より小さい確率を返します。

4

1 に答える 1

2

CDF ではなく、確率密度関数 (PDF) を使用する必要があります。微分するだけでCDFからPDFを取得します(関数が表になっている場合は数値的に行います)。あなたがそれを指定した方法で、 CDF(c | a, b)に関してあなたの微分を取る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.

分布をp(c)計算できるようになったので、好きな統計情報を計算できます。

于 2013-06-03T19:24:27.203 に答える