Kullback Leibler JAVA:如何规范分布

时间:2014-11-17 09:57:48

标签: java

我在java中有这个方法来计算概率分布的KL:

 public static double klDivergence(double[] p1, double[] p2) {
  double klDiv = 0.0;
  for (int i = 0; i < p1.length; ++i) {
    if (p1[i] == 0) { continue; }
    if (p2[i] == 0.0) { continue; } 

  klDiv += p1[i] * Math.log( p1[i] / p2[i] );
  }

  return klDiv; 
}


public static void main(String[] args) {

 double[] d1=new double[2];
 double[] d2=new double[2];

 d1[0]=0.23654;
 d1[1]=0.56565;  

 d2[0]=0.23654;
 d2[1]=0.89312;


 double symmetric= (klDivergence(d1, d2)+klDivergence(d2, d1))/2;
}

在计算对称KL之前,我应该规范化概率分布吗?如果你喜欢?

1 个答案:

答案 0 :(得分:1)

Kullback-Leibler divergence定义了discrete probability distributions。这些是按照定义归一化为1.此外,没有归一化d1 [0] = 0; d1 [1] = 1和d2 [0] = 0; d2 [1] = 2将导致Kullback-Leibler散度不为零。 所以是的,你应该规范你的发行版。