Matplotlib 使用curve_fit得到r-squared值

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
Python

然后,我们定义一个函数来拟合我们的数据。这里我们使用一个简单的二次函数:f(x)=ax2+bx+cf(x) = ax^2+bx+c

def func(x, a, b, c):
    return a * x**2 + b * x + c
Python

接下来,我们使用numpy模块生成一些模拟数据。

xdata = np.linspace(-10, 10, 50)
ydata = 5 * xdata**2 + 3 * xdata - 4
plt.plot(xdata, ydata, 'b-', label='data')
Python

然后,我们使用curve_fit函数进行拟合。curve_fit的第一个参数是我们要拟合的函数,第二个参数是拟合的自变量,第三个参数是拟合的数据。最后,我们得到拟合的参数,使用这些参数生成拟合曲线并绘图显示。

popt, pcov = curve_fit(func, xdata, ydata)
plt.plot(xdata, func(xdata, *popt), 'r-', label='fit')
Python

当我们生成完图表,我们可以按照以下方法得到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)
Python

例子

下面是一段完整的例子,将前面的方法结合在一起,绘制一个带有拟合曲线和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()
Python

运行以上代码,会得到以下输出和图表:

R-squared: 0.9999999728073131
Python

总结

本文介绍了如何使用curve_fit方法来拟合实验数据,并得到r-squared值。实验数据和需要拟合的函数会根据具体需求而有所不同,我们需要根据具体的应用场景来选择和修改代码。r-squared值越接近1,表示模型对数据的拟合越好。但是需要注意的是,r-squared值并不能说明模型的预测能力。在实际应用中需要综合考虑拟合精度与预测精度。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册