我从机器学习开始,到目前为止仅测试了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库中提供的算法将是完美的!
一个想法是将其视为多类问题。您可以想象这是您的目标,其中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个类别和4个示例,因此我们得到一个4x4矩阵。列表示类/位置,行表示事件。
现在,我们将使用前三个观察值来预测第四个观察值:
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]
如果遵循此过程,您将能够获得可用于分类器的训练集。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句