Java ID3计算熵

时间:2014-12-08 11:24:56

标签: java id3

我正在实施ID3,我发现熵有些变化。以下两行是否相同?由于我需要Log to base 2,第二个是否默认将它作为基数为10?

entropy += -probability * (Math.log(probability) / Math.log(2));

entropy += -probability * (Math.log(probability));

2 个答案:

答案 0 :(得分:1)

Math.log()方法给出了日志库10。

您的第一行使用数学定律计算日志基数2:log a (x)= log b (x)/ log b (a)中。

答案 1 :(得分:0)

请参阅JavaDocs:http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#log10(double)

  

public static double log10(double a)

     

返回double值的基数10对数。特殊情况:

     
      
  • 如果参数为NaN或小于零,则结果为NaN。
  •   
  • 如果参数为正无穷大,则结果为正无穷大。
  •   
  • 如果参数为正零或负零,则结果为负无穷大。
  •   
  • 如果参数对于整数n等于10n,则结果为n。
  •   
     

计算结果必须在精确结果的1 ulp范围内。结果   必须是半单调的。

     

参数:

     

a - 值

     

返回:

     

a的基数10对数。

     

时间:

     

1.5

"返回双值的基数10对数。"

您可以创建名为 log2()

的静态方法
public static double log2(double n) {
    return Math.log(n) / Math.log(2);
}