如何定义curve_fit()中的拟合优度?如何评估Voigt拟合效果?
curve_fit拟合优度定义及Voigt拟合结果评估
拟合优度(R²)的定义
拟合优度(常用R²表示)是衡量模型对数据拟合效果的核心指标,计算公式为:
R² = 1 - (SS_res / SS_tot)
其中:
- SS_res:残差平方和,即所有数据点实际值与拟合值的差的平方总和,
SS_res = Σ(y_i - ŷ_i)² - SS_tot:总平方和,即所有数据点实际值与整体均值的差的平方总和,
SS_tot = Σ(y_i - ȳ)²
R²取值范围在0到1之间,越接近1说明拟合模型对数据的解释能力越强,拟合效果越好。
评估Voigt拟合结果的具体实现
结合你给出的拟合代码,按以下步骤即可评估匹配程度:
1. 计算拟合值
用curve_fit返回的最优参数popt,代入Voigt函数得到每个x对应的拟合y值:
import numpy as np # 基于最优参数计算拟合值 y_fit = voigt(xval, *popt)
2. 计算核心评估指标
# 计算残差平方和SS_res ss_res = np.sum((yval - y_fit) ** 2) # 计算总平方和SS_tot y_mean = np.mean(yval) ss_tot = np.sum((yval - y_mean) ** 2) # 计算拟合优度R² r_squared = 1 - (ss_res / ss_tot) print(f"拟合优度R²: {r_squared:.4f}") # 可选:计算均方误差MSE(衡量平均平方误差) mse = ss_res / len(yval) print(f"均方误差MSE: {mse:.6f}")
3. 可视化辅助评估
通过绘图可以更直观判断拟合效果:
- 残差分布图:如果残差随机分布在0线附近,无明显趋势,说明拟合合理
import matplotlib.pyplot as plt residuals = yval - y_fit plt.scatter(xval, residuals, alpha=0.6) plt.axhline(y=0, color='red', linestyle='--') plt.xlabel('x') plt.ylabel('残差') plt.title('残差分布') plt.show()
- 拟合曲线与原始数据对比图:直接观察拟合曲线和原始数据的贴合程度
plt.scatter(xval, yval, label='原始数据', alpha=0.6) plt.plot(xval, y_fit, 'r-', label='Voigt拟合曲线') plt.xlabel('x') plt.ylabel('y') plt.legend() plt.title('Voigt拟合 vs 原始数据') plt.show()
注意事项
- 确保
xval和yval是numpy数组,避免循环计算的低效和错误 - 如果数据存在异常值,R²可能被干扰,此时残差图能帮你快速识别异常点
内容的提问来源于stack exchange,提问作者Kanan Yagublu
相关产品推荐
相关产品推荐

