用 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 的训练集。
我刚开始学习机器学习,到目前为止只测试了 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 的训练集。