在线熵评估算法

问题描述:

有没有一种方法可以评估entropy的离散值流,类似于SumamryStatistics的平均值和偏差? 我需要这种算法用于实时solr组件,它可能会迭代大型文档集合(100,000)。在线熵评估算法

相关的问题,什么是最好的方法来计算熵减少像环境。

可能有一种方法 - 它在某种程度上取决于流的特征以及您想要对结果执行的操作。

样本熵是样本概率分布的函数。您可以将每个值的运行计数与运行总计数一起存储,这意味着可以根据需要计算分配。请原谅我的拙劣的Java,自从我写这篇文章以来已经过去了大约一年。

Map<K,Integer> runningCount = new Map<K,Integer>(); 
int totalCount = 0; 

public void addValue(K k) { 
    runningCount.insert(k, runningCount.get(k) + 1); 
    totalCount += 1; 
} 

public Map<K,Double> getDistribution() { 
    Map<K,Double> dist = new Map<K,Double>(); 
    for (K k : runningCount.keys()) { 
     dist.insert(k, runningCount.get(k)/totalCount); 
    } 
    return dist; 
} 

这意味着,你也可以计算需求熵:

public double getEntropy() { 
    Map<K,Double> dist = getDistribution(); 
    double entropy = 0; 
    for (K k : dist.keys()) { 
     double p = dist.get(k); 
     entropy -= p * Math.log(p); 
    } 
    return entropy; 
} 

该算法是O(ñ)来计算二者的分布和熵,其中ñ是您的流可能会采用的值的数量。它与流中值的数量无关,正如您从addValue方法不存储流值的事实可以看到的那样。

+0

是的,你是对的,解决方案很简单,我们可能可以将地图切换到数组来提高性能。这对连续变量不起作用,但我不需要这个。谢谢。 – yura 2012-08-14 06:51:35