如何利用scipy.optimize.curve_fit输出的协方差矩阵计算R平方?
如何基于scipy.optimize.curve_fit结果计算R平方
关键前提
scipy.optimize.curve_fit输出的协方差矩阵无法直接计算R平方。协方差矩阵仅用于评估拟合参数的不确定性(比如参数的标准差),而R平方是衡量模型拟合优度的指标,计算依赖原始数据和拟合值,与协方差矩阵无关。
R平方的计算方法
R平方的核心公式为:
R² = 1 - (残差平方和 / 总平方和)
其中:
- 残差平方和(SS_res):真实值与拟合值的差的平方和
- 总平方和(SS_tot):真实值与自身均值的差的平方和
具体实现代码
import numpy as np from scipy.optimize import curve_fit # 定义自定义拟合函数 def fit_func(x, a, b, c): return a * np.exp(-b * x) + c # 准备数据(示例) x_data = np.linspace(0, 5, 50) y_true = 3 * np.exp(-0.5 * x_data) + 1 y_data = y_true + np.random.normal(0, 0.2, size=x_data.shape) # 执行曲线拟合 params, cov_matrix = curve_fit(fit_func, x_data, y_data) # 计算拟合值 y_fit = fit_func(x_data, *params) # 计算R平方 ss_res = np.sum((y_data - y_fit) ** 2) ss_tot = np.sum((y_data - np.mean(y_data)) ** 2) r_squared = 1 - (ss_res / ss_tot) print(f"拟合的R平方值: {r_squared:.4f}")
协方差矩阵的用途(补充)
协方差矩阵的对角元素对应各拟合参数的方差,取平方根可得到参数的标准差,用于判断参数的可靠性:
param_std_errors = np.sqrt(np.diag(cov_matrix)) print(f"各参数的标准差: {param_std_errors}")
内容的提问来源于stack exchange,提问作者enoquoley
相关产品推荐
相关产品推荐

