2017-06-14 14 views
1

私は平均して、私が試したの両方のガウス分布 ための標準偏差を有するガウス#2 にガウス#1からカルバック・ライブラー情報量を計算しようとしていますhttp://www.cs.cmu.edu/~chanwook/MySoftware/rm1_Spk-by-Spk_MLLR/rm1_PNCC_MLLR_1/rm1/python/sphinx/divergence.pyカルバック・ライブラー情報量、ガウスQMにPV、QV

def gau_kl(pm, pv, qm, qv): 
    """ 
    Kullback-Leibler divergence from Gaussian pm,pv to Gaussian qm,qv. 
    Also computes KL divergence from a single Gaussian pm,pv to a set 
    of Gaussians qm,qv. 
    Diagonal covariances are assumed. Divergence is expressed in nats. 
    """ 
    if (len(qm.shape) == 2): 
     axis = 1 
    else: 
     axis = 0 
    # Determinants of diagonal covariances pv, qv 
    dpv = pv.prod() 
    dqv = qv.prod(axis) 
    # Inverse of diagonal covariance qv 
    iqv = 1./qv 
    # Difference between means pm, qm 
    diff = qm - pm 
    return (0.5 * 
      (numpy.log(dqv/dpv)   # log |\Sigma_q|/|\Sigma_p| 
      + (iqv * pv).sum(axis)   # + tr(\Sigma_q^{-1} * \Sigma_p) 
      + (diff * iqv * diff).sum(axis) # + (\mu_q-\mu_p)^T\Sigma_q^{-1}(\mu_q-\mu_p) 
      - len(pm)))      # - N 

から、このコード平均が1つの数であると私はここにLen関数を理解していないので、私は平均して、入力として標準偏差が、コード(len(pm))原因エラーの最後の行を使用します。

注。二組(すなわち、ガウス分布)が

この関数は、多変量の共分散行列の対角エントリを期待...あなたはまだ興味があれば私はscipy.stats.entropy

答えて

0

を使用することができなかった理由です等しくありませんあなたが言及する標準偏差ではありません。入力が単変量ガウス分布の場合、pvqvは、対応するガウス分布の分散のために長さ1のベクトルです。

さらに、len(pm)は、平均ベクトルの次元に対応する。確かにk多変量正規分布セクションhereです。単変量ガウス分布の場合、kは1、二変量の場合はkは2です。

関連する問題