利用 Python Fitter 判斷數據樣本符合那種分布函數


 

# Python擬合數據樣本的分布
# 安裝fitter
# pip install fitter
# 生成一段模擬數據
from scipy import stats
import numpy as np
# N(0,2)+N(0,10)
data1 = list(stats.norm.rvs(loc=0, scale=2, size=70000))
data2 = list(stats.norm.rvs(loc=0, scale=20, size=30000))
data = np.array(data1+data2)

# 利用fitter擬合數據樣本的分布
from fitter import Fitter
# may take some time since by default, all distributions are tried
# but you call manually provide a smaller set of distributions
f = Fitter(data, distributions=['norm', 't', 'laplace', 'rayleigh'])
f.fit()
f.summary() #返回排序好的分布擬合質量(擬合效果從好到壞),並繪制數據分布和Nbest分布
f.df_errors #返回這些分布的擬合質量(均方根誤差的和)
f.fitted_param #返回擬合分布的參數
f.fitted_pdf #使用最適合數據分布的分布參數生成的概率密度
print(f.get_best(method='sumsquare_error')) #返回最佳擬合分布及其參數
f.hist() #繪制組數=bins的標准化直方圖
f.plot_pdf(names=None, Nbest=3, lw=2) #繪制分布的概率密度函數
print(f.summary())

# 方法詳解
# Fitter方法
# Fitter(data, xmin=None, xmax=None, bins=100, distributions=None, verbose=True, timeout=10)
# 參數:
# data (list) –輸入的樣本數據;
# xmin (float) – 如果為None,則使用數據最小值,否則將忽略小於xmin的數據;
# xmax (float) – 如果為None,則使用數據最大值,否則將忽略大於xmin的數據;
# bins (int) – 累積直方圖的組數,默認=100;
# distributions (list) – 給出要查看的分布列表。 如果沒有,則嘗試所有的scipy分布(80種),常用的分布distributions=[‘norm’,‘t’,‘laplace’,‘cauchy’, ‘chi2’,’ expon’, ‘exponpow’, ‘gamma’,’ lognorm’, ‘uniform’];
# verbose (bool) –
# timeout – 給定擬合分布的最長時間,(默認=10s) 如果達到超時,則跳過該分布。

# Fitter返回
# f.summary() #返回排序好的分布擬合質量(擬合效果從好到壞),並繪制數據分布和Nbest分布
# f.df_errors #返回這些分布的擬合質量(均方根誤差的和)
# f.fitted_param #返回擬合分布的參數
# f.fitted_pdf #使用最適合數據分布的分布參數生成的概率密度
# f.get_best(method='sumsquare_error') #返回最佳擬合分布及其參數
# f.hist() #繪制組數=bins的標准化直方圖
# f.plot_pdf(names=None, Nbest=3, lw=2) #繪制分布的概率密度函數

# from fitter import Fitter
# import numpy as np
#
# arr = np.arange(1, 200)
# np.random.shuffle(arr)  # arr為創建的隨機數
#
# fitter_dis = Fitter(arr)
# fitter_dis.fit()
# distribution_df = fitter_dis.summary()  # 這里可以得到error最小的Dataframe型數據

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM