python拟合泊松分布_Python Numpy泊松分布
首先,假設您import numpy as np,我會寫下這個答案,因為它明確區分numpy函數與內置函數或math和random的函數包的python。
我認為沒有必要回答您指定的問題,因為您的基本假設是錯誤的:
是的,泊松統計量的均值等于方差,但假設您使用常數 lam。但你不是。你輸入高斯的y值,所以你不能指望它們是恒定的(它們是你的定義高斯!)。
使用np.random.poisson(lam=0.5)從泊松分布中獲取一個隨機值。但要小心,因為這個泊松分布甚至與你的高斯分布大致相同,因為你處于低均值"兩者都有顯著差異的區間,例如參見Wikipedia article about Poisson distribution。
此外,您正在創建隨機數字,因此您不應該繪制它們,而是繪制np.histogram個。由于統計分布都與概率密度函數有關(見Probability density function)。
之前,我已經提到你創建了一個帶有常數lam的泊松分布,所以現在是時候討論size了:你創建了隨機數,所以近似真實的泊松分布你需要繪制大量隨機數。大小來自:np.random.poisson(lam=0.5, size=10000)例如創建一個10000個元素的數組,每個元素從泊松概率密度函數中繪制,平均值為0.5。
如果您在之前提及的維基百科文章中沒有閱讀它,那么泊松分布根據定義僅提供無符號(> = 0)整數作為結果。
所以我猜你想要做的是創建一個包含1000個值的高斯和泊松分布:
gaussian = np.random.normal(0.5, 2*np.sqrt(2*np.log(2)), 1000)
poisson = np.random.poisson(0.5, 1000)
然后繪制它,繪制直方圖:
import matplotlib.pyplot as plt
plt.hist(gaussian)
plt.hist(poisson)
plt.show()
要從隨機樣本中獲取統計信息,您仍然可以在高斯和泊松樣本上使用np.var和np.mean。而這次(至少在我的樣本運行中)他們給出了很好的結果:
print(np.mean(gaussian))
0.653517935138
print(np.var(gaussian))
5.4848398775
print(np.mean(poisson))
0.477
print(np.var(poisson))
0.463471
注意高斯值幾乎與我們定義的參數完全相同。另一方面,泊松均值和變量幾乎相等。您可以通過增加上面的size來提高均值和變量的精度。
為什么泊松分布不接近原始信號
原始信號僅包含0到1之間的值,因此泊松分布僅允許正整數,標準差與平均值相關聯。從高斯的平均值到目前為止,你的信號大約為0,因此泊松分布幾乎總是為0。高斯具有它的最大值為1. 1的泊松分布看起來像這樣(左邊是信號+泊松,右邊是泊松分布,值為1)
因此你會在該地區獲得大量的0和1以及2。但是也有可能你將值繪制到7。這正是我提到的反對稱性。如果你改變高斯的幅度(例如乘以1000),那么" fit"因為泊松分布在那里幾乎是對稱的,所以要好得多:
總結
以上是生活随笔為你收集整理的python拟合泊松分布_Python Numpy泊松分布的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ruby 之Gem kaminari 分
- 下一篇: Cookie中path总结