预测整数/二进制值的序列

机器算法验证 机器学习 可能性
2022-03-24 14:58:41

我正在使用的数据是二进制值序列 (0 / 1),它们通常具有一个模式 - 较长的 1 序列后跟较短的 0 序列,例如:
1 1 1 1 0 0 1 1 1 1 1 0 0 0
目标是根据整个序列预测下一个值。
每个序列有 10 到 20 个值,应使用所有可用数据对每个序列单独进行预测。我意识到可以使用的数据点很少,所以我的问题是:是否有任何统计方法可以实现这种类型的预测?我从来不用处理序列数据,所以我不知道如何处理这个问题。

3个回答

您可以考虑的一种方法是尝试学习马尔可夫链(MC) 来表示每个序列,然后根据该 MC 预测未来值。

MC 是表示学习自动机(LA) 类型的一种方式,并且可以在系统的后续状态仅取决于当前状态时使用。它们可以用图表直观地表示:

由两个状态组成的 LA 图

这是一个非常简单的洛杉矶。它有两种状态:一种是最后看到的数字是 1,另一种是最后看到的数字是 0。还指出了不同状态之间的转换概率。例如,当 LA 处于状态 0 时,它很有可能会停留在状态 0x并且将有概率移动到状态 11x. 这也可以用矩阵的形式表示:

[x1x1yy]

从您的示例序列估计,11110011111000, 我们可以说在这种情况下x=0.6y=0.77.

这种解决方案也可以扩展;我们可以学习具有更多状态和更多“记忆”的 LA。

基于第一个数字的 LA,但有四个州而不是两个州。

或者

[w01w0x01x001y0y01z0z]

这个 LA 有四种状态: 00,已经看到两个或多个连续的 0;0,只看到一个连续的 0;1,只看到一个连续的 1;和 11,其中看到两个或多个连续的 1。

我们可以再次从您的示例序列中估计相应的概率,并且可能会说w=0.33,x=1,y=1z=0.71.

我可能值得尝试使用神经网络进行分类,特别是 LSTM 正在做你想要实现的事情。
它可以按如下方式使用:

  • LSTM 需要输入序列的长度相同。这可以通过添加前导字符来填充数据来解决。填充字符不应为 0 或 1。另一种解决方案是使用批量大小 1,而不在每个批次后重置状态。
  • 应使用一种热方法对填充数据进行编码。您可以使用 3 个类别:0、1 和填充字符。
  • 每个序列的最后一个二进制值应用作目标,其余的用作输入。当然,填充字符永远不会成为目标,因为我们在前面进行了填充。
  • Stacking 2 LSTM 会做得更好
  • 您的网络可能如下所示: Input->LSTM->LSTM->Dense->Dense->Output
  • 你拥有的数据越多,它就能更好地学习模式。这样的网络很容易知道填充字符永远不是输出,所以不用担心。

一种方法是通过分类。您需要一个二进制输出,这正是分类算法可以提供的。

您可以根据该时间序列构建数据集。假设你有n现在的价值观。进一步假设您认为n+1可以根据t之间的最后一个值nnt+1. 像这样,你有nt+1观察(除了时间序列中的前几个,因为它们没有足够的滞后观察)t每个二进制变量(都以相同的方式从当前值开始到滞后值排序)。你可以基于这个数据集构建各种分类器,比较它们的性能并选择最好的一个来预测。t是要调整的参数。

不过,这将始终是一个高风险的预测。因为您基本上只想预测一个只能有两个值的数字。根据定义,这将是全部或全部。

如果与错误预测 0 相关的成本与错误预测 1 的成本不同,您可以反映这一点,并使您的算法更容易预测错失成本更高的值。