簡體   English   中英

如何打印高斯曲線擬合結果?

[英]How to print Gaussian curve fitting results?

我花了一些時間,但我使用下面的代碼為我的 x,y 數據集創建了一個高斯擬合。

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
def Gauss(x, a, x0, sigma, offset):
    return a * np.exp(-(x - x0)**2 / (2 * sigma**2)) + offset
x, y = np.random.random(100), np.random.random(100)
popt, pcov = curve_fit(Gauss, x, y, p0=[np.max(y), np.median(x), np.std(x), np.min(y)])
plt.plot(x, y, 'b+:', label='data')
x_fit = np.linspace(np.min(x), np.max(x), 1000)
plt.plot(x_fit, Gauss(x_fit, *popt), 'r-', label='fit')
plt.legend()
plt.title('Something')
plt.xlabel('Anotherthing')
plt.ylabel('Athing')
plt.show()

我可以看到我的合身做得很好,看到了圖表和一切。

圖片

我現在想知道的是如何在我的屏幕上打印出這種擬合的結果,例如擬合最大值點 x 處的最大值、估計誤差等?

這些信息是否可以訪問? 如果是這樣,有沒有辦法打印出這些信息? 如果沒有,有人可以指出我找到合適錯誤的正確方向嗎?

相關信息包含在變量poptpcov 請參閱scipy 文檔 您將收到每個變量的數組。

看看這里: https ://lmfit.github.io/lmfit-py/model.html [見函數result.fit_report()]。 您還可以將最終參數添加到繪圖的標簽中How to return the fit error in Python curve_fit

正如 tagoma 所指出的,您擬合的所有相關信息都包含在 popt(最佳參數)和 pcov(協方差矩陣)中。 在這種情況下,給定您的一組參數(a、x0、sigma、offset),您可以將它們解包為:

a, x0, sigma, offset = popt;

要解開他們的不確定性,類似地:

ua, ux0, usigma, uoffset = np.sqrt(np.diag(pcov));

(因為它們是由它們自己的協方差給出的)。

據我所知,curve_fit 不提供卡方或標准差等更多信息,我通常在擬合完成后立即執行所需的計算,只需將所有平方差相加並除以原始值(但更多一個統計的東西)。

希望它有所幫助。

暫無
暫無

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

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