You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python的scipy.curve_fit获取高斯拟合的质量?

用scipy.optimize.curve_fit拟合高斯函数后的拟合质量评估方法

以下是几种常用的拟合质量评估方法,直接基于curve_fit的输出和原始数据计算:

1. 决定系数(R²)

R²衡量拟合模型对数据变异的解释程度,取值范围0到1,越接近1说明拟合效果越好。

计算步骤:

  • 用拟合得到的参数生成拟合值y_fit
  • 计算总平方和(TSS):观测值与均值的偏差平方和
  • 计算残差平方和(RSS):观测值与拟合值的偏差平方和
  • R² = 1 - (RSS / TSS)

示例代码:

import numpy as np
from scipy.optimize import curve_fit

# 定义高斯函数
def gaussian(x, amp, mean, std):
    return amp * np.exp(-(x - mean)**2 / (2 * std**2))

# 原始数据示例
x_data = np.linspace(-5, 5, 100)
y_data = gaussian(x_data, 3, 0, 1) + np.random.normal(0, 0.2, 100)

# 执行拟合
params, cov = curve_fit(gaussian, x_data, y_data)
y_fit = gaussian(x_data, *params)

# 计算R²
y_mean = np.mean(y_data)
tss = np.sum((y_data - y_mean)**2)
rss = np.sum((y_data - y_fit)**2)
r_squared = 1 - (rss / tss)
print(f"R²值: {r_squared:.4f}")

2. 残差分析

残差是y_data - y_fit,通过观察残差的分布可以判断拟合是否合理:

  • 残差应随机分布在0附近,无明显趋势(如递增、递减、周期性)
  • 残差的方差应大致均匀

示例代码(绘制残差图):

import matplotlib.pyplot as plt

residuals = y_data - y_fit
plt.scatter(x_data, residuals)
plt.axhline(y=0, color='r', linestyle='--')
plt.xlabel('x')
plt.ylabel('Residuals')
plt.title('Residual Plot')
plt.show()

3. 卡方(χ²)检验

如果你的数据带有测量误差(即每个数据点的标准差sigma已知),可以计算卡方值:
χ² = Σ[(y_obs - y_fit)² / sigma²]

拟合良好时,χ²值应接近自由度(自由度=数据点数量-拟合参数数量),或者χ²/自由度接近1。

示例代码:

# 假设每个数据点的测量标准差已知
sigma = np.full_like(y_data, 0.2)
chi_squared = np.sum((y_data - y_fit)**2 / sigma**2)
degrees_of_freedom = len(y_data) - len(params)
chi_squared_per_dof = chi_squared / degrees_of_freedom
print(f"χ²值: {chi_squared:.4f}, χ²/自由度: {chi_squared_per_dof:.4f}")

4. 均方根误差(RMSE)

RMSE衡量拟合值与观测值之间的平均偏差,数值越小说明拟合精度越高。

计算代码:

rmse = np.sqrt(np.mean((y_data - y_fit)**2))
print(f"RMSE值: {rmse:.4f}")

内容的提问来源于stack exchange,提问作者Captain Nikon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:01:03