用 python 预测时间序列数据

Predicting time series data with python

我刚开始学习机器学习,到目前为止只测试了 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 库中可用的算法将是完美的!

一个想法是将其视为一个多 class 问题。您可以将其想象为您的目标 y 有 25 行(实际上是 24 行,但暂时忘记它),其中每列为 1 或 0,表示事件是否发生。

作为 X 的预测因子,您可以选择一些滞后平均值或最后一个 3 观察值。有关详细信息,请参阅

一些代码:

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 个 classes 和 4 个示例,所以我们得到一个 4x4 矩阵。列代表 classes/locations,行代表事件。

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

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

我们得到 4 classes 和 3 个观察值。我们需要把它变成一个向量,因为这只是一个样本:

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

这里的每一列都是一个 feature/predictor,可以用以下方式解释:第一列中的 1 表示 class 一个人出现了 3 天。第 7 列中的 0 表示 class 3 在 2 天前不存在,依此类推。

所以现在我们有一个sample/event(最终X矩阵的一行)和相应的标签(目标y的一行):

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

如果您按照此过程进行操作,您将能够获得可提供给 classifier 的训练集。