我使用不同的python来适应数据集中的密度函数。此数据集由从1秒开始的正时间值组成。
我测试了来自scipy.statistics和powerlaw库的不同密度函数,以及使用scipy.optimize的函数curve_fit()测试自己的函数。
到目前为止,当拟合下列修正的幂律函数时,我得到了最好的结果:
def funct(x, alpha, x0):
return((x+x0)**(-alpha))我的代码如下:
bins = range(1,int(s_distrib.max())+2,1)
y_data, x_data = np.histogram(s_distrib, bins=bins, density=True)
x_data = x_data[:-1]
param_bounds=([0,-np.inf],[np.inf,np.inf])
fit = opt.curve_fit(funct,
x_data,
y_data,
bounds=param_bounds) # you can pass guess for the parameters/errors
alpha,x0 = fit[0]
print(fit[0])
C = 1/integrate.quad(lambda t: funct(t,alpha,x0),1,np.inf)[0]
# Calculate fitted PDF and error with fit in distribution
pdf = [C*funct(x,alpha,x0) for x in x_data]
sse = np.sum(np.power(y_data - pdf, 2.0))
print(sse)
fig, ax = plt.subplots(figsize=(6,4))
ax.loglog(x_data, y_data, basex=10, basey=10,linestyle='None', marker='.')
ax.loglog(x_data, pdf, basex=10, basey=10,linestyle='None', marker='.')拟合返回的值为x0为8.48,alpha为1.40。在日志图中,数据和fit图如下所示:

opt.curve_fit函数中将(x+x0)更改为(x-x0)时,在funct中得到以下警告和错误?由于我对x0的界限是(-inf,+inf),所以我期望拟合值返回-8.48。/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:3: RuntimeWarning:除以倒数中遇到的零,这与ipykernel包是分开的,所以我们可以避免进行导入,直到ValueError:残留物在初始点上没有限制。
这是很多问题,因为我非常不熟悉的主题,任何评论和回答,即使是部分,将非常感谢!
https://stackoverflow.com/questions/60995024
复制相似问题