使用 Python 从曲线外推数据
Extrapolating data from a curve using Python
我正在尝试从一个数据集中推断未来的数据点,该数据集每天包含一个连续值,持续近 600 天。我目前正在使用 numpy.polyfit
和 numpy.poly1d
对数据拟合一阶函数。在下图中,您可以看到曲线(蓝色)和一阶函数(绿色)。 x 轴是自开始以来的天数。我正在寻找一种在 Python 中对这条曲线建模的有效方法,以便尽可能准确地推断未来的数据点。线性回归不够准确,我不知道在这种情况下可以使用任何非线性回归方法。
这个解决方案不够准确,就像我喂食一样
x = dfnew["days_since"]
y = dfnew["nonbrand"]
z = numpy.polyfit(x,y,1)
f = numpy.poly1d(z)
x_new = future_days
y_new = f(x_new)
plt.plot(x,y, '.', x_new, y_new, '-')
编辑:
我现在已经尝试 curve_fit 使用对数函数,因为曲线和数据行为似乎符合:
def func(x, a, b):
return a*numpy.log(x)+b
x = dfnew["days_since"]
y = dfnew["nonbrand"]
popt, pcov = curve_fit(func, x, y)
plt.plot( future_days, func(future_days, *popt), '-')
然而,当我绘制它时,我的 Y 值偏离了:
一般的经验法则是,如果您的拟合函数不能很好地拟合您的实际数据,那么:
- 您使用的功能有误,例如您正在使用一阶多项式 - 因此,如果您确信它是多项式,请尝试更高阶多项式。
你用错了函数,值得一看:
- 你的数据曲线&
- 您对生成数据的过程了解多少
想出一些speculation/theorem/guesses关于哪种模型可能更合适。
您的过程可能是对数过程、饱和过程等。试试吧!
最后,如果您没有获得一致的长期趋势,那么您可以证明使用三次样条曲线是合理的。
我正在尝试从一个数据集中推断未来的数据点,该数据集每天包含一个连续值,持续近 600 天。我目前正在使用 numpy.polyfit
和 numpy.poly1d
对数据拟合一阶函数。在下图中,您可以看到曲线(蓝色)和一阶函数(绿色)。 x 轴是自开始以来的天数。我正在寻找一种在 Python 中对这条曲线建模的有效方法,以便尽可能准确地推断未来的数据点。线性回归不够准确,我不知道在这种情况下可以使用任何非线性回归方法。
这个解决方案不够准确,就像我喂食一样
x = dfnew["days_since"]
y = dfnew["nonbrand"]
z = numpy.polyfit(x,y,1)
f = numpy.poly1d(z)
x_new = future_days
y_new = f(x_new)
plt.plot(x,y, '.', x_new, y_new, '-')
编辑:
我现在已经尝试 curve_fit 使用对数函数,因为曲线和数据行为似乎符合:
def func(x, a, b):
return a*numpy.log(x)+b
x = dfnew["days_since"]
y = dfnew["nonbrand"]
popt, pcov = curve_fit(func, x, y)
plt.plot( future_days, func(future_days, *popt), '-')
然而,当我绘制它时,我的 Y 值偏离了:
一般的经验法则是,如果您的拟合函数不能很好地拟合您的实际数据,那么:
- 您使用的功能有误,例如您正在使用一阶多项式 - 因此,如果您确信它是多项式,请尝试更高阶多项式。
你用错了函数,值得一看:
- 你的数据曲线&
- 您对生成数据的过程了解多少
想出一些speculation/theorem/guesses关于哪种模型可能更合适。
您的过程可能是对数过程、饱和过程等。试试吧!
最后,如果您没有获得一致的长期趋势,那么您可以证明使用三次样条曲线是合理的。