JavaID3计算熵
我正在实现一个ID3,我发现熵有一些变化。以下两行是否相等?由于我需要将日志记录到基2,那么第二个日志是否默认将日志记录到基10JavaID3计算熵,java,id3,Java,Id3,我正在实现一个ID3,我发现熵有一些变化。以下两行是否相等?由于我需要将日志记录到基2,那么第二个日志是否默认将日志记录到基10 entropy += -probability * (Math.log(probability) / Math.log(2)); 及 Math.log() 您的第一行使用数学定律计算logbase 2:loga(x)=logb(x)/logb(a)。请参阅JavaDocs了解: 公共静态双日志10(双a) 返回双精度值的以10为底的对数。特殊情况: 如果参数为Na
entropy += -probability * (Math.log(probability) / Math.log(2));
及
Math.log()
您的第一行使用数学定律计算logbase 2:loga(x)=logb(x)/logb(a)。请参阅JavaDocs了解:
公共静态双日志10(双a)
返回双精度值的以10为底的对数。特殊情况:
- 如果参数为NaN或小于零,则结果为NaN
- 如果参数为正无穷大,则结果为正无穷大
- 如果参数为正零或负零,则结果为负无穷大
- 如果整数n的参数等于10n,则结果为n
计算结果必须在精确结果的1 ulp范围内。结果
必须是半单调的
参数:
a-a值
返回:
a的以10为底的对数
自:
1.5
“返回双精度值的以10为底的对数。”
您可以创建一个名为log2()的静态方法
public static double log2(double n) {
return Math.log(n) / Math.log(2);
}
第二个默认为log10。如果你想得到log2,第一个是正确的。如果需要,可以创建一个方法:double log2(double n){return Math.log(n)/Math.log(2);}
public static double log2(double n) {
return Math.log(n) / Math.log(2);
}