【问题标题】:Java ID3 calculating entropyJava ID3计算熵
【发布时间】: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); }

标签: java id3


【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 2015-01-31
      • 1970-01-01
      • 2013-06-10
      • 2014-03-31
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 2017-02-08
      相关资源
      最近更新 更多