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

Python curve_fit初始猜测自动化适配多组XY数据失败问题排查

关于scipy curve_fit指数拟合的自动化初始猜测问题

这是Stack Overflow相关问题的延伸,我有四组XY点需要用指数函数拟合,使用scipy.optimize.curve_fit工具,大部分数据组合拟合正常,但存在部分组合因初始猜测值不合适导致拟合失效,需要找到适配所有数据的自动化初始猜测方案。

数据集

  • X数据集:
    • list_x1: [3.139, 2.53, 0.821, 0.27]
    • list_x2: [859.8791936328762, 805.5080517453312, 639.2578427310567, 496.3622821767497]
  • Y数据集:
    • list_y1: [0.21, 0.49, 1.56, 23.97]
    • list_y2: [0.01, 0.01, 0.04, 2.46]

初始拟合代码

from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import numpy as np

list_x = [859.8791936328762, 805.5080517453312, 639.2578427310567, 496.3622821767497]
list_y = [0.01, 0.01, 0.04, 2.46]

def func_exp(x, a, b, c, d):
    return a + b*np.exp(-c*(x-d))

# 自动化初始猜测
p0 = (0, max(list_x), 0, max(list_y))
list_line_info, pcov = curve_fit(func_exp, list_x, list_y, maxfev=100000, p0=p0)

# 绘制拟合曲线与数据点
plot_x = np.linspace(min(list_x), max(list_x), 1000)
plot_y = func_exp(plot_x, *list_line_info)

plt.plot(plot_x, plot_y, linestyle="-", color="orangered")
plt.plot(list_x, list_y, linestyle="--", color="dodgerblue")
plt.scatter(list_x, list_y, color="black", zorder=2)
plt.grid()

问题现象

  • 上述初始猜测p0 = (0, max(list_x), 0, max(list_y))对list_x1、list_x2与list_y1的所有组合拟合效果正常,但list_x2 + list_y2组合拟合失效,曲线完全偏离数据点;
  • 调整初始猜测为p0 = (0, max(list_x), 0.01, max(list_y))后,list_x2 + list_y2组合拟合恢复正常,但list_x1 + list_y2组合又出现拟合偏差问题。

后续尝试的修改

根据评论建议调整了初始猜测的参数对应关系,代码如下:

from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import numpy as np

list_x = [859.8791936328762, 805.5080517453312, 639.2578427310567, 496.3622821767497]
list_y = [0.21, 0.49, 1.56, 23.97]

def func_exp(x, a, b, c, d):
    return a + b*np.exp(-c*(x-d))

# 修改后的初始猜测
p0 = (0, max(list_y), 0, max(list_x))
list_line_info, pcov = curve_fit(func_exp, list_x, list_y, maxfev=100000, p0=p0)

plot_x = np.linspace(min(list_x), max(list_x), 1000)
plot_y = func_exp(plot_x, *list_line_info)

plt.plot(plot_x, plot_y, linestyle="-", color="orangered")
plt.plot(list_x, list_y, linestyle="--", color="dodgerblue")
plt.scatter(list_x, list_y, color="black", zorder=2)
plt.grid()

但该修改仍无法覆盖所有数据组合,其中一组组合的拟合曲线与数据点严重偏离。

提问

请问我遗漏了什么关键点?如何实现能适配所有四组XY数据组合的自动化初始猜测?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:34:59