我正在实施ID3,我发现熵有些变化。以下两行是否相同?由于我需要Log to base 2,第二个是否默认将它作为基数为10?
entropy += -probability * (Math.log(probability) / Math.log(2));
和
entropy += -probability * (Math.log(probability));
答案 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);
}