Java ID3计算熵
Posted
技术标签:
【中文标题】Java ID3计算熵【英文标题】:Java ID3 calculating entropy 【发布时间】:2014-12-08 11:24:55 【问题描述】:我正在实现一个 ID3,我发现熵有一些变化。以下两行是否等效?由于我需要以 2 为底的日志,所以第二个是否默认将其以 10 为底?
entropy += -probability * (Math.log(probability) / Math.log(2));
和
entropy += -probability * (Math.log(probability));
【问题讨论】:
第二个默认log10。第一个是正确的,如果你想得到log2。如果需要,您可以创建一个方法:double log2(double n) return Math.log(n) / Math.log(2);
【参考方案1】:
Math.log()
方法给出的日志基数为 10。
您的第一行使用数学定律计算以 2 为底的对数:loga(x) = logb(x) / logb(一)。
【讨论】:
【参考方案2】:请参阅 JavaDocs:http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#log10(double)
public static double log10(double a)
返回双精度值的以 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);
【讨论】:
以上是关于Java ID3计算熵的主要内容,如果未能解决你的问题,请参考以下文章