如何在scikit-learn中预测时间序列?
machine-learning
python
scikit-learn
5
0

Scikit-learn利用基于fitpredict方法的非常方便的方法。我有适合fitpredict的格式的时间序列数据。

例如,我有以下Xs

[[1.0, 2.3, 4.5], [6.7, 2.7, 1.2], ..., [3.2, 4.7, 1.1]]

和相应的ys

[[1.0], [2.3], ..., [7.7]]

这些数据具有以下含义。 ys存储的值形成一个时间序列。 Xs中的值是相应的时间相关的“因数”,已知它们会影响ys的值(例如:温度,湿度和大气压)。

现在,我当然可以使用fit(Xs,ys) 。但是随后我得到了一个模型,其中ys中的未来值仅取决于因素,而不取决于(至少直接地)先前的Y值,这是该模型的局限性。我想有一个模型,其中Y_n取决于Y_{n-1}Y_{n-2}等。例如,我可能要使用指数移动平均线作为模型。 scikit-learn中最优雅的方法是什么

添加

正如评论中提到的,我可以通过添加ys扩展Xs 。但是这种方式有一些局限性。例如,如果我将y的最后5个值作为5个新列添加到X ,则有关ys时间顺序的信息将丢失。例如,在X中没有指示第五列中的值跟随第四列中的值,依此类推。作为模型,我可能希望具有最近五个ys的线性拟合,并使用找到的线性函数进行预测。但是,如果我在5列中有5个值,那就不是那么简单了。

加了2

为了使我的问题更加清楚,我想举一个具体的例子。我想要一个“线性”模型,其中y_n = c + k1*x1 + k2*x2 + k3*x3 + k4*EMOV_n ,其中EMOV_n只是指数移动平均值。如何在scikit-learn中实现此简单模型?

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

关于指数加权移动平均线,这可能是您要寻找的:

import pandas, numpy
ewma = pandas.stats.moments.ewma
EMOV_n = ewma( ys, com=2 )

在这里, com是一个参数,您可以在此处阅读。然后,您可以使用以下方法将EMOV_n组合到Xs

Xs = numpy.vstack((Xs,EMOV_n))

然后,您可以在这里查看各种线性模型,并执行类似的操作:

from sklearn import linear_model
clf = linear_model.LinearRegression()
clf.fit ( Xs, ys )
print clf.coef_

祝你好运!

收藏
评论

根据Wikipedia的说法,EWMA与固定数据配合得很好,但是在存在趋势或季节性的情况下,EWMA不能按预期工作。在那种情况下,您应该分别使用二阶或三阶EWMA方法。我决定查看pandas ewma函数,以了解它如何处理趋势,这就是我想到的:

import pandas, numpy as np
ewma = pandas.stats.moments.ewma

# make a hat function, and add noise
x = np.linspace(0,1,100)
x = np.hstack((x,x[::-1]))
x += np.random.normal( loc=0, scale=0.1, size=200 )
plot( x, alpha=0.4, label='Raw' )

# take EWMA in both directions with a smaller span term
fwd = ewma( x, span=15 )          # take EWMA in fwd direction
bwd = ewma( x[::-1], span=15 )    # take EWMA in bwd direction
c = np.vstack(( fwd, bwd[::-1] )) # lump fwd and bwd together
c = np.mean( c, axis=0 )          # average  

# regular EWMA, with bias against trend
plot( ewma( x, span=20 ), 'b', label='EWMA, span=20' )

# "corrected" (?) EWMA
plot( c, 'r', label='Reversed-Recombined' )

legend(loc=8)
savefig( 'ewma_correction.png', fmt='png', dpi=100 )

在此处输入图片说明

如您所见,EWMA逆势而上。我们可以通过在两个方向上均采用EWMA然后求平均来对此进行校正(而不必自己实施二阶方案)。希望您的数据稳定!

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号