具有无限预测的序列预测

数据挖掘 回归 预言 顺序
2022-03-12 21:23:54

我有一种特殊的预测问题。

我观察到个序列之间的距离来自相同的正态分布,例如 . 我可以学习参数MXm=[x1,x2,...,xN]dxnxn+1dN(μ,σ2)μ,σ

现在我需要一次预测/生成整个序列,如果预测的某个绝对容差范围内,则它被认为是正确的有一个警告:我可以做出尽可能多的预测而不会受到惩罚,但预测,我们可以安全地假设直观地说,这让我想要预测一个模式,而不是试图单独预测每个点。x^nxnϵx^nx^n+1ϵ<<d

重申一下:超出真实数据点容差的预测不会受到惩罚。我们只需要最大化正确预测的数量(在真实数据点的容差范围内)。

示例 1

Prediction:       [10, 20, 30]
True observation: [11, 21, 31]
------------------------------
3 correct predictions if tolerance >= 1, else 0 correct predictions

示例 2

Epsilon = 4 (eg we can predict with a minimum distance 4)

Prediction: [6, 10, 15, 22, 30, 35]
True observation:      [11, 21, 31]
-----------------------------------
tolerance = 1 => 2 correct predictions (10, 30)
tolerance = 2 => 3 correct predictions (10, 22, 30)

解决这个问题的好方法是什么?有没有类似的问题?

为清晰起见进行了编辑。

2个回答

您所拥有的评估方案的最大问题 - “成功”意味着在公差范围内,“失败”意味着超出公差,加上您对模型输出的约束需要在每个时间步发生变化 - 是很难提取梯度以便训练直接预测模型。这排除了许多简单直接的回归模型,至少如果您想使用“在公差范围内最大化分数”作为您的目标函数如果按原样考虑,对顺序预测和允许重试的约束也是不可微的。

我认为您有两个顶级选择:

1、软化损失函数,增加硬函数作为度量

当预测准确且满足约束时,使用具有最佳分数的可微损失函数。例如,您对单个预测值的损失函数可能是

L(x^n,x^n+1,xn+1)=(x^n+1xn+1)2+a1+es(|x^nx^n+1|ϵ)

第二个约束部分本质上是 sigmoida以预测的准确性控制满足约束的相对权重和s控制约束周围的截止陡度。

一种。预测损失和约束损失之间的权重将是模型的超参数。所以你需要包括as如果您使用了我建议的损失函数,请在要搜索的参数中。

湾。您可以使用评分系统,而不是作为目标函数,而是作为在超参数搜索中选择最佳模型的指标。

C。通过这种方法,您可以使用许多标准序列学习模型,例如 LSTM(如果您有足够的数据)。或者,您可以只使用一个单步预测模型,将当前预测以及允许知道的序列的任何其他特征提供给它,并通过重复调用它来从中生成序列。

这个系统应该鼓励更接近真实价值的重试。

2. 直接使用你的评分系统作为学习目标

这将需要一些替代优化框架来围绕预测模型进行梯度下降(尽管一些框架可以在内部生成梯度)。遗传算法或其他优化器可用于管理模型的参数,并可以尝试更改模型参数以改善结果。

对于第二种情况,假设您有充分的理由想要完全避免构建可微分损失函数,那么这个问题可以被定义为强化学习(RL)

  • 状态:当前序列项预测(或空条目),以及任何已知信息,例如容差、序列长度、当前序列项值(可能与当前预测不同)ϵ,d,μ或者σ可以是当前状态的一部分。

  • 动作是选择下一个序列值预测,或者可能更有用的是,选择下一个序列项值的偏移量。使用偏移量可以让您轻松添加最小约束ϵ

  • 如果在容忍范围内,奖励为 +1,否则为 0。

  • 时间步长与当前序列中的时间步长相匹配。

您可以使用它来构建 RL 环境并训练将在其中包含您的预测/生成器模型的代理。RL 中有很多选项可以用来管理它。但是 RL 在这里给你的是一种使用不可微奖励正式定义目标的方法,而在内部,模型仍然可以使用基于梯度的方法进行训练。

此处不使用 RL 的主要原因是,是否必须在生成序列的最后评估预测模型。在这种情况下,“动作”也可能是整个序列,并且变得更难以优化。从这个问题是否是这种情况,我并不是 100% 清楚。

警告:RL 是一个庞大而复杂的研究领域。如果您至少还没有了解一些 RL,那么您可能会花费数周时间来掌握它,然后再开始在您的原始问题上取得进展。

RL 的替代方案同样适用,例如NEAT - 决定哪个可能是最好的涉及对项目的更多了解(例如您希望预测的序列的复杂性)和实际方面,例如您有多少时间致力于学习、测试和实施新技术。

你忘记了什么吗?

如果您允许无限重试,那么一个明显的策略是生成一个非常大的序列,使用不同的步长上下移动(都大于ϵ)。这不需要任何学习模型,只需一点智能编码即可最终覆盖所有整数。在大多数语言中,这种模型很可能只是几行代码。

如果要排除这种情况,则需要其他一些规则或约束:

  • 也许预测序列中只允许正增量(所以我们不能通过减去再试来重试)?这与您的“无限预测”声明相冲突。

  • 也许这里的一个子目标是使猜测有效?在这种情况下,RL 可能很有用,因为您可以在奖励处理中添加折扣因子,以使模型更愿意更快地得到正确的预测。

我没有这方面的证据,但我希望你能做的最好的事情是从你的训练数据中估计间隔时间的正态分布,然后只预测平均间隔时间的点。您似乎没有任何功能可以指示间隔何时比平均值更短或更长,因此您所能做的就是预测平均值并让它从长远来看。当然,如果平均间隔时间长于最小预测间隔 (epsilon) 的两倍,则应该在间隙中插入更多预测,因为这样做没有不利之处。