2012-08-14 138 views
1

有沒有一種方法可以評估entropy的離散值流,類似於SumamryStatistics的平均值和偏差? 我需要這種算法用於實時solr組件,它可能會迭代大型文檔集合(100,000)。在線熵評估算法

相關的問題,什麼是最好的方法來計算熵減少像環境。

回答

1

可能有一種方法 - 它在某種程度上取決於流的特徵以及您想要對結果執行的操作。

樣本熵是樣本概率分佈的函數。您可以將每個值的運行計數與運行總計數一起存儲,這意味着可以根據需要計算分配。請原諒我的拙劣的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