日期时间的curve_fit时exp的溢出

问题描述 投票:0回答:1

我尝试使用curve_fit拟合日期时间与浮动数据。据我了解,curve_fit不适用于日期时间,因此我首先必须将数据转换为数值。这给了我非常大的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)

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


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

第一个主意:不要使用to_numeric进行转换,而是以其他方式产生较小的数字。我的输入数据非常简单,每天只包含1行,因此我不需要时间或其他任何东西。还有另一个类似于to_numeric()的函数会忽略时间部分并产生较小的数字吗?

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

python pandas overflow curve-fitting exponential
1个回答
0
投票

我通过将较大的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)),而fititng函数显然没有喜欢。

© www.soinside.com 2019 - 2024. All rights reserved.