datetime曲线拟合时exp溢出

2024-09-26 04:59:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用curve_fit来拟合datetime与float数据。据我所知,曲线拟合不适用于datetime,因此我首先必须将数据转换为数值。这给了我非常大的x值,导致exp函数溢出。我的代码如下。如果我用多项式而不是指数拟合,同样的代码也能工作

    def func(x, a):
        return (np.exp(a*x))

    def fit_exponential(gd):
        gdtemp['Date'] = pd.to_datetime(gdtemp.Date)

        mask = (gdtemp['Date'] > '2020-01-30') & (gdtemp['Date'] <= '2020-03-20')

        gdtemp = gdtemp.loc[mask].copy()

        x = pd.to_numeric(gdtemp.Date)
        y=gdtemp['Confirmed']

        popt, pcov = curve_fit(func,x, y)

如何修改代码以使用指数型


关于如何解决这个问题,我有两个想法,但不确定如何实施:

第一个想法:不要将with转换为numeric,而是以其他方式生成较小的数字。我的输入数据相当简单,每天只包含一行,所以我不需要时间或其他任何东西。是否还有另一个类似于_numeric()的函数忽略时间部分并生成较小的数字

第二个想法:将数字日期值除以某个大数字,然后再相乘。我应该用什么数字来除法


Tags: to数据函数代码datetimedatedef数字
1条回答
网友
1楼 · 发布于 2024-09-26 04:59:24

我解决了这个问题,将大数值x值映射到区间[0;1],并在此区间上进行拟合

主要修改如下:

small_x = (x - x.min()) / (x.max() - x.min())
popt, pcov = curve_fit(func4 ,small_x, y )

指数中的值现在是合理的(在我的例子中是1的数量级),并且溢出没有问题

如果没有这个映射,我将得到非常大的x值(大约10^(15))和非常小的a值(大约10^(-15)),这显然是fittng函数不喜欢的

相关问题 更多 >