【发布时间】:2015-11-21 08:19:01
【问题描述】:
我正在尝试从包含近 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 值偏离了:
【问题讨论】:
-
一个非常简单的方法是:首先查看图形并考虑图形可能属于的参数函数族。也许一些对数函数?然后使用 scipy 中的
curve_fit查找具体参数并使用该函数进行外推。 -
谢谢,我已经尝试过了,希望您对我的编辑提供反馈。
-
帮您有点麻烦,因为我自己无法尝试。
a*numpy.log(x)+b似乎很成问题。如果你也允许 x 轴移位会发生什么?a*numpy.log(x + b) + c? -
太棒了!这就是我试图破解的坚果,谢谢。该曲线非常适合我的数据的预期行为,可能会为任务提供一个很好的解决方案。
-
很高兴它成功了。尝试激进的功能也可能会给你带来好的结果。将对数与平方根进行比较,例如可能有道理。
标签: python numpy statistics regression polynomial-math