【发布时间】:2014-01-17 10:26:00
【问题描述】:
Scikit-learn 使用基于 fit 和 predict 方法的非常方便的方法。我有适合fit 和predict 格式的时间序列数据。
例如我有以下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 中最优雅的方法是什么
添加
正如 cmets 中提到的,我可以通过添加 ys 来扩展 Xs。但是这种方式有一些局限性。例如,如果我将 y 的最后 5 个值作为 5 个新列添加到 X,则有关 ys 的时间排序信息将丢失。例如,X 中没有指示第 5 列中的值在第 4 列中的值之后,依此类推。作为一个模型,我可能希望对最后五个ys 进行线性拟合,并使用找到的线性函数进行预测。但是,如果我在 5 列中有 5 个值,那就不是那么简单了。
增加了 2 个
为了让我的问题更清楚,我想举一个具体的例子。我想要一个“线性”模型,其中y_n = c + k1*x1 + k2*x2 + k3*x3 + k4*EMOV_n,其中 EMOV_n 只是一个指数移动平均线。如何在 scikit-learn 中实现这个简单的模型?
【问题讨论】:
-
您可以简单地将
[np.nan] + ys[:-1]添加为因素之一 -
behzad.nouri,我已经扩展了我的问题作为对您评论的回复。
-
我认为最好的办法是尝试几种不同的简单模型,包括@behzad.nouri 建议的模型,并使用交叉验证来查看是否有任何一个模型比其他模型表现更好并获得一种直觉。时间准确的时间信息可能没有您想象的那么重要。我会在神经网络中使用扩展的 Xs 向量想法,看看是否可行。在这种方法中,您可以保留您的时间信息,即使 n.n.就像一个黑匣子。
-
您的数据是否托管在任何地方?我可以看看吗?
-
很遗憾没有托管日期,上面的例子只是一个例子(真实数据有更复杂的结构)。
标签: python machine-learning time-series scikit-learn