利用 Python Fitter 判斷資料樣本符合那種分佈函式
阿新 • • 發佈:2021-01-12
# 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型資料