使用python预测时间序列数据

时间:2015-01-12 19:48:20

标签: python machine-learning

我从机器学习开始,到目前为止只测试了scikit-learn但我找不到合适的算法或类似于我的问题的例子。

我有一个时间序列,显示事件发生的位置。事件的位置用1到25之间的整数(包括)标识。在某个特定日期,事件不能在同一个地方发生两次,而且总是发生在5个地方。

我的数据如下:

2015-01-01,1,3,5,8,9,10
2015-01-03,23,16,3,5,9
2015-01-05,22,16,6,13,11

第一列是日期,其他列是地点。如果没有发生任何事情,则不包括日期。

您是否有任何建议我应该考虑使用哪种算法来预测下一个时间序列中的数字(地点)?

像scikit-learn这样的Python库中可用的算法将是完美的!

1 个答案:

答案 0 :(得分:1)

一个想法是将其视为一个多类问题。你可以把它想象成你的目标y有25行(实际上是24但现在忘了它),其中每列是1或0代表事件发生与否。

作为X的预测变量,您可以选择一些滞后平均值,或者最后一次让3观察。有关详细信息,请参阅this question

一些代码:

from io import StringIO
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()

s="""
2015-01-01,1,2,3
2015-01-03,1,2,4
2015-01-05,1,2,4
2015-01-07,1,4,3
"""
df = pd.read_csv(StringIO(s), index_col=0, parse_dates=True, header=None)

mlb = MultiLabelBinarizer()
labels = mlb.fit_transform(df.values)
labels
[[1 1 1 0]
 [1 1 0 1]
 [1 1 0 1]
 [1 0 1 1]]

我们有4个类和4个示例,因此我们得到一个4x4矩阵。列表示类/位置,行表示事件。

现在我们将使用前3个观察来预测第四个观察结果:

X = labels[:-1]   
[[1 1 1 0]
 [1 1 0 1]
 [1 1 0 1]]

我们得到4个班级和3个观察。我们需要将它设为矢量,因为这只是一个样本:

>>> X.flatten()
[1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1]

此处的每一列都是一个功能/预测器,可以通过以下方式进行解释:第一列中的1表示第一类出现3天。第7列中的0表示2天前没有出现3级,依此类推。

现在我们有一个样本/事件(最后X矩阵的一行)和相应的标签(目标y的一行):

>>> labels[-1]
[1 0 1 1]

如果您按照此程序操作,您将能够获得可以提供给分类器的训练集。