我尝试使用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()的函数忽略时间部分并生成较小的数字
第二个想法:将数字日期值除以某个大数字,然后再相乘。我应该用什么数字来除法
我解决了这个问题,将大数值x值映射到区间[0;1],并在此区间上进行拟合
主要修改如下:
指数中的值现在是合理的(在我的例子中是1的数量级),并且溢出没有问题
如果没有这个映射,我将得到非常大的x值(大约10^(15))和非常小的a值(大约10^(-15)),这显然是fittng函数不喜欢的
相关问题 更多 >
编程相关推荐