python拟合统计分布_利用 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型数据

你可能感兴趣的:(python拟合统计分布)