2015-06-20 46 views
3

我正在使用EnumeratedIntegerDistribution從我的密鑰集中生成樣本。如何以編程方式計算離散概率

如何以編程方式計算「離散概率」數組。例如,我可能想要一個近似的「正常」分佈或Zipf分佈。

int[] keys = keyDomain(domainMin, domainMax); 
    double[] discreteProbabilities = new double[] { ?, ?, ?, ?, .... }; 

    EnumeratedIntegerDistribution distribution = new EnumeratedIntegerDistribution(keys, discreteProbabilities); 

    int numSamples = 100; 
    int[] samples = distribution.sample(numSamples); 
+0

要離散概率是從正常或Zipf分佈? – paisanco

+0

確定Zipf分佈,所以我想將discreteProbabilities數組設置爲值,這將導致樣本數組確認Zipf的分佈。謝謝(使用時)https://commons.apache.org/proper/commons-math/javadocs/api-3.5/org/apache/commons/math3/distribution/EnumeratedIntegerDistribution.html#EnumeratedIntegerDistribution(int [],double [] ) – dmc

回答

1

只要你的分佈是真正的離散和超過在您的範圍(例如泊松分佈)的整數定義,不存在問題,只要你有某種式分配您discreteProbabilities []數組你可以計算您範圍內每個整數值的概率,然後由於您限制在範圍內,因此可以將分配的概率除以它們的總和,以便在範圍內得到一個真實的分佈,即sum = 1.

但是,如果您的分佈是「連續」的,即樣本可以是任何浮點數/實數值,或者在某個範圍內,那麼情況會更復雜。您必須決定如何將此分佈轉換爲您範圍內整數的分佈。一種方法是簡單地在整數值處評估概率密度函數(例如,對於正態分佈基本上是exp(-x^2/2)),然後除以整數範圍內的總和。不過,如果你假設例如您將採樣舍入到最接近的整數值以獲取您的採樣整數值。如果你想這樣做,那麼你應該計算連續概率密度的積分(例如,如果沒有反導數的公式,用數字積分),其中積分介於n-0.5和n +對於您範圍內的每個整數n,爲0.5。那麼這是整數n的概率值,與之前相似,除以整數範圍內的總和,以便概率加起來爲1.

+0

是的,我的分佈是離散的,對「計算概率的某種公式」有幫助嗎?我想對zipf或正態分佈進行某種近似。或任何其他風格。我正在尋找一些能夠以更現實的方式對數據進行評估的模式,並假定其是隨機的。我不擅長數學,謝謝 – dmc