algorithm - 有哪些快速的熵计算算法

标签 algorithm optimization machine-learning language-agnostic entropy

private double log(double num, int base){
   return Math.log(num)/Math.log(base);
}

public double entropy(List<String> data){

    double entropy = 0.0;
    double prob = 0.0;

    if(this.iFrequency.getKeys().length==0){
        this.setInterestedFrequency(data);
    }


    String[] keys = iFrequency.getKeys();

    for(int i=0;i<keys.length;i++){

        prob = iFrequency.getPct(keys[i]);
        entropy = entropy - prob * log(prob,2);
    }

    iFrequency.clear();
    return entropy;
}

我编写了一个函数来计算数据集的熵。该功能运行良好,数学计算正确。如果我处理的是小型数据集,一切都会好起来的,但问题是我正在使用此函数来计算具有数千或数万个成员的集合的熵,并且我的算法运行缓慢。

除了我正在使用的算法之外,是否还有其他算法可用于计算集合的熵?如果没有,是否可以向我的代码添加任何优化以使其运行得更快?

我找到了 this问题,但他们并没有真正深入细节。

最佳答案

首先,您似乎构建了一个复杂度为 O(N^2) 的算法,因为您在每次调用 getPct 时重新计算计数总和。我推荐两个操作: (1) 对计数求和一次 并存储值。手动计算 prob 作为 value[i]/sum。 (2) 如果将熵计算为总和 prob * Math.log(prob),将会节省少量时间。当你全部完成后,将 一次 除以 Math.log(2)。

关于algorithm - 有哪些快速的熵计算算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34351098/

相关文章:

gcc - 了解 GCC 的 alloca() 对齐和看似错过的优化

c - 为什么 gcc 只用 _mm_set_ss 添加这个 movss 指令?

python - 具有两个特征的梯度下降计算特征空间

algorithm - 在 NxM 板上生成障碍物

c - 我想澄清以下答案是否正确?

algorithm - 最后 k 位数字之和与前 k 位数字之和相同

machine-learning - 了解卷积神经网络的输出

Java寻路益智游戏

html - twitter-bootstrap - 导航栏元素有时会被推到导航栏下

machine-learning - 使用机器学习的基于内容的推荐系统需要多少个分类器