簡體   English   中英

來自scipy.optimze的curve_fit問題

[英]Problems with curve_fit from scipy.optimze

我知道有一些類似的問題,但由於他們都沒有帶我進一步,我決定問一個我自己的問題。 對不起,如果我的問題的答案已經在某處,但我真的找不到它。

我嘗試使用curve_fit將f(x)= a * x ** b擬合為相當線性的數據。 它編譯正確,但結果如下所示:

在此輸入圖像描述

問題是,我真的不知道我在做什么,但另一方面,擬合總是更像是一門藝術,而不是科學,至少有一個與scipy.optimize的一般錯誤

我的數據如下:

x值:

[16.8, 2.97, 0.157, 0.0394, 14.000000000000002, 8.03, 0.378, 0.192, 0.0428, 0.029799999999999997, 0.000781, 0.0007890000000000001]

y值:

[14561.766666666666, 7154.7950000000001, 661.53750000000002, 104.51446666666668, 40307.949999999997, 15993.933333333332, 1798.1166666666666, 1015.0476666666667, 194.93800000000002, 136.82833333333332, 9.9531566666666684, 12.073133333333333]

這是我的代碼(在該問題的最后一個答案中使用了一個非常好的例子):

def func(x,p0,p1): # HERE WE DEFINE A FUNCTION THAT WE THINK WILL FOLLOW THE DATA DISTRIBUTION
    return p0*(x**p1)

# Here you give the initial parameters for p0 which Python then iterates over to find the best fit
popt, pcov = curve_fit(func,xvalues,yvalues, p0=(1.0,1.0))#p0=(3107,0.944)) #THESE PARAMETERS ARE USER DEFINED

print(popt) # This contains your two best fit parameters

# Performing sum of squares
p0 = popt[0]
p1 = popt[1]
residuals = yvalues - func(xvalues,p0,p1)
fres = sum(residuals**2)

print 'chi-square'
print(fres) #THIS IS YOUR CHI-SQUARE VALUE!

xaxis = np.linspace(5e-4,20) # we can plot with xdata, but fit will not look good 
curve_y = func(xaxis,p0,p1)

起始值來自與gnuplot的擬合,這似乎是合理的,但我需要交叉檢查。

這是打印輸出(首先適合p0,p1,然后是卡方):

[  4.67885857e+03   6.24149549e-01]
chi-square
424707043.407

我想這是一個很難的問題,所以非常感謝!

當擬合curve_fit優化(數據 - 模型)^ 2 /(誤差)^ 2的總和時

如果您沒有傳遞錯誤(正如您在此處所做的那樣), curve_fit假定所有點的錯誤均為1。

在這種情況下,當您的數據跨越多個數量級時,具有最大y值的點主導目標函數,並導致curve_fit嘗試以犧牲其他值為代價來擬合它們。

修復此問題的最佳方法是在擬合中包含yvalues的誤差(看起來就像你在你繪制的圖中有誤差條一樣!)。 您可以通過將它們作為curve_fitsigma參數傳遞來完成此curve_fit

我會重新考慮實驗部分。 兩個數據點是有問題的: 在此輸入圖像描述

你給我們看的圖像看起來很不錯,因為你拍了日志:

在此輸入圖像描述

您可以對log(x)和log(y)進行線性擬合。 通過這種方式,您可以限制最大殘差的影響。 另一種方法是穩健回歸(來自sklearn的RANSAC或來自scipy的leastSquares)。

不過,您應該收集更多數據點或重復測量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM