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计算熵的主要内容,如果未能解决你的问题,请参考以下文章

Python:ID3算法的基本原理及代码复现

ID3决策树算法|机器学习

决策树 -- ID3算法小结

ID3和KNN

决策树 ID3方法

ID3算法Java实现