[英]Power law distribution fitting in Python
我正在使用不同的 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 的值。 在 loglog 圖中,數據和擬合圖如下所示:
opt.curve_fit
在不斷變化的(X + X0)到(X-X0)時, funct
的功能? 由於我對 x0 的界限是 (-inf, +inf),我期待擬合返回 -8.48。/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:3: 運行時警告:在倒數中遇到除以零 這與 ipykernel 包分開,因此我們可以避免進行導入,直到 ValueError: Residuals are not in the initial觀點。
這是很多問題,因為我對這個主題非常陌生,任何評論和回答,即使是部分的,都將不勝感激!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.