簡體   English   中英

如何在 scipy.stats 中獲取分布模式

[英]How to get the mode of distribution in scipy.stats

scipy.stats庫具有查找擬合分布的均值和中位數的功能,但不具有查找scipy.stats數的功能。

如果我擬合數據后有一個分布的參數,我怎么能找到的mode擬合分布的?

如果我沒有弄錯,您想找到擬合分布的眾數而不是給定數據的眾數。 基本上,我們可以通過以下 3 個步驟來完成。

步驟 1:從分布生成數據集

from scipy import stats
from scipy.optimize import minimize
# generate a norm data with 0 mean and 1 variance
data = stats.norm.rvs(loc= 0,scale = 1,size = 100)
data[0:5]

輸出:

數組([1.76405235, 0.40015721, 0.97873798, 2.2408932, 1.86755799])

第二步:擬合參數

# fit the parameters of norm distribution
params = stats.norm.fit(data)
params

輸出:

(0.059808015534485, 1.0078822447165796)

請注意, stats.norm有 2 個參數,即locscale 對於scipy.stats不同的 dist ,參數是不同的。 我認為將參數存儲在元組中然后在下一步中解壓縮它很方便。

第 3 步:獲取擬合分布的眾數(密度函數的最大值)

# continuous case
def your_density(x):
    return -stats.norm.pdf(x,*paras)
minimize(your_density,0).x

輸出:

0.05980794

需要注意的是一個norm分布mode等於mean 在這個例子中這是一個巧合。

另一件事scipy對連續 dist 和離散 dist 的處理不同(它們具有不同的父類),您可以在離散 dist 上使用以下代碼執行相同的操作。

## discrete dist, example for poisson
x = np.arange(0,100) # the range of x should be specificied
x[stats.poisson.pmf(x,mu = 2).argmax()] # find the x value to maximize pmf

出去:

1

您可以嘗試使用您自己的數據和分布!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM