Matplotlib 使用curve_fit得到r-squared值
阅读更多:Matplotlib 教程
简介
curve_fit是一个基于非线性最小二乘拟合的函数,可以用来拟合实验数据,并返回拟合参数。在数据拟合中,r-squared值是一个常用指标,它可以告诉我们模型对数据的拟合程度。本文将介绍如何使用matplotlib库中的curve_fit方法得到r-squared值。
如何使用curve_fit方法
首先,我们需要导入matplotlib库:
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
然后,我们定义一个函数来拟合我们的数据。这里我们使用一个简单的二次函数:f(x) = ax^2+bx+c。
def func(x, a, b, c):
return a * x**2 + b * x + c
接下来,我们使用numpy模块生成一些模拟数据。
xdata = np.linspace(-10, 10, 50)
ydata = 5 * xdata**2 + 3 * xdata - 4
plt.plot(xdata, ydata, 'b-', label='data')
然后,我们使用curve_fit函数进行拟合。curve_fit的第一个参数是我们要拟合的函数,第二个参数是拟合的自变量,第三个参数是拟合的数据。最后,我们得到拟合的参数,使用这些参数生成拟合曲线并绘图显示。
popt, pcov = curve_fit(func, xdata, ydata)
plt.plot(xdata, func(xdata, *popt), 'r-', label='fit')
当我们生成完图表,我们可以按照以下方法得到r-squared值:
residuals = ydata - func(xdata, *popt)
ss_res = np.sum(residuals**2)
ss_tot = np.sum((ydata - np.mean(ydata))**2)
r_squared = 1 - (ss_res / ss_tot)
print('R-squared:', r_squared)
例子
下面是一段完整的例子,将前面的方法结合在一起,绘制一个带有拟合曲线和r-squared值的数据图表。
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
def func(x, a, b, c):
return a * x**2 + b * x + c
xdata = np.linspace(-10, 10, 50)
ydata = 5 * xdata**2 + 3 * xdata - 4
plt.plot(xdata, ydata, 'b-', label='data')
popt, pcov = curve_fit(func, xdata, ydata)
plt.plot(xdata, func(xdata, *popt), 'r-', label='fit')
residuals = ydata - func(xdata, *popt)
ss_res = np.sum(residuals**2)
ss_tot = np.sum((ydata - np.mean(ydata))**2)
r_squared = 1 - (ss_res / ss_tot)
print('R-squared:', r_squared)
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
运行以上代码,会得到以下输出和图表:
R-squared: 0.9999999728073131
总结
本文介绍了如何使用curve_fit方法来拟合实验数据,并得到r-squared值。实验数据和需要拟合的函数会根据具体需求而有所不同,我们需要根据具体的应用场景来选择和修改代码。r-squared值越接近1,表示模型对数据的拟合越好。但是需要注意的是,r-squared值并不能说明模型的预测能力。在实际应用中需要综合考虑拟合精度与预测精度。
极客教程