這篇文章建立在我剛纔的問題曲線擬合優化SciPy的Python的numpy的
我有一些X數據和一些Y數據,Y數據可以適合作爲X數據的加權和,和我的問題是找到最適合的係數。
我現在明白了一種方法,但我意識到它可能不是最好的或最佳的方式。
但是,我所擁有的X數據有時可能會發生偏移,因此只有在將X的每列向上或向下移動N個增量後才能獲得最佳擬合。
我試圖看看np.roll是否可以用來做到這一點,但我卡住了,因爲我的函數現在需要np.roll的係數和整數值,可用於向上或向下移動列N以改善適合度。
我認爲我的主要問題是不明白如何將這兩種不同的參數傳遞給curvefit - 可能嗎?
也許np.roll不是最好的方法嗎?所以任何建議的另一種方式也將不勝感激。
在我下面的例子中,將第二列移動-1會使Xdata更適合Ydata。
xdata = np.array([[1.0, 1.0],[1.0, 1.0], [2.0, 3.0], [4.0, 2.0], [2.0, 1.0],[1.0, 1.0]])
ydata = np.array([3.0, 5.0, 6.0, 9.0, 5.0, 3.0])
def fitfunc(xdata, *params):
ctx = 0.0
# y is not yet defined by somehow I would like it to take the values passed in the second np.array defined in c below
# the for loop should just run twice in this example
for n in range(len(params)):
ctx = params[n]*np.roll(xdata[:,n], y, axis=0) + ctx
return ctx, y
#initial guesses for fitting parameters
c = (np.array([0.6, 0.3]), np.array([1, 1])) # the second np.array is what I would like to pass a y's
# fit data using SciPy's Levenberg-Marquart method
nlfit, nlpcov = scipy.optimize.curve_fit(fitfunc, xdata, ydata, p0=(c), sigma=None)
print (nlfit)
謝謝你提前爲任何幫助
您是否嘗試使用形式爲y = mx + b的線性模型,並且想要包含常數項b,從而將線路上下移動?或者,您的數據是一組時間序列,您不確定要使用哪些x變量的滯後(可能由np.roll暗示)? – David
我的數據是光譜。所以Xdata數組可能是兩列按列排列的光譜矩陣。從我之前關於這個主題的問題中,我相信我的Xdata可以將我的ydata描述爲X * a + X * b ... etc = Ydata。我想在試圖優化擬合時上下移動我的x數據列的原因是,實驗性錯誤意味着這樣的轉變在實際數據中是常見的,因此,以及將Xdata的每列與係數相乘,I'希望有一些方法可以嘗試Xdata列彼此間的相對轉換,以找到最適合的方式。 – steve
我希望澄清我希望實現的目標? np.roll只是我認爲我可以實現列之間相對移動的一種方式。所涉及的光譜有幾千個點,所以我的想法是,從一端向另一端滾動幾個點,反之亦然,以獲得更好的配合可能是實現這一目標的一種方式。 – steve