如何为有状态的学习系统确定合适的滞后特征?

机器算法验证 机器学习 神经网络 滞后 状态空间模型
2022-03-31 09:26:36

在许多机器学习文献中,被建模的系统是瞬时的。Inputs -> outputs,没有来自过去值的影响的概念。

在某些系统中,来自先前时间步长的输入是相关的,例如因为系统具有内部状态/存储。例如,在水文模型中,您有输入(雨、太阳、风)和输出(流量),但您也有不同深度的地表和土壤存储。在基于物理的模型中,您可以将这些状态建模为离散的桶,流入、流出、蒸发、泄漏等都根据物理定律。

如果您想在纯粹的经验意义上对流量进行建模,例如使用神经网络,您可以创建一个瞬时模型,并且您会得到好的初步近似结果(实际上在地表建模中,您可以轻松地做得比基于物理的模型...)。但是你会错过很多相关的信息——例如,水流本身相对于降雨量是滞后的。

解决这个问题的一种方法是包含输入特征的滞后变体。例如,如果您的数据是每小时的,则包括rain over the last 2 days, rain over the last month根据我的经验,这些输入确实改善了模型结果,但对于您如何选择适当的滞后,这基本上是一个经验和反复试验的问题。有大量可能的滞后变量需要包括(直接滞后数据、滞后平均值、指数移动窗口等;多个变量,具有交互作用,并且通常具有高协方差)。我想理论上可以对最佳模型进行网格搜索,但这会非常昂贵。

我想知道a)是否有一种合理、便宜且相对客观的方法可以从几乎无限的选择中选择要包含的最佳滞后,或者b)是否有更好的方法在纯经验机器中表示存储池-学习模式。

3个回答

你可以创建一个瞬时模型,你会得到好的初步近似结果

你听说过循环神经网络又名 RNN 吗?state 参数保存有关过去的信息,理论上可以拥有无​​限的内存(尽管在实践中这并不总是最好的配置)。查看我提供的链接——那一章有一些非常有用的图像,可以帮助理解 RNN 如何通过“汇总”过去的信息来建模序列。

对于示例应用程序,请查看两台计算机在语音数据序列上训练的视频(显然它们具有过去单词的记忆,并且不只是一次瞬间生成一个单词)。

如果我们想查看过去很长一段时间的滞后(或从它们衍生的特征,如指数移动平均线或它们之间的交互),那么将会有大量的候选特征。正如您正确提到的,即使您想训练一个简单的线性回归模型,网格搜索也会很昂贵。在这种情况下非常有用的一种方法是使用快速的次优特征选择方法。例如,您可以使用贪心后向子集选择、贪心后/前或 Lasso 特征选择。这可以更快,您可以查看更多的功能。根据我的个人经验,也根据本文,如果特征高度相关,贪婪向后/向前的表现优于套索: http://papers.nips.cc/paper/3586-adaptive-forward-backward-greedy-algorithm-for-sparse-learning-with-linear-models.pdf

另一个对许多时间序列有帮助的直觉是,当我们更多地回顾过去时,确切的时间变得不那么重要了。例如,在您的示例中,降雨对水流的影响,今天和昨天的降雨可能在您的模型中具有不同的系数。但是 365 天前的降雨和 366 天前的降雨可能会对今天的流量产生相同的影响。这有助于应用基于时间聚合数据的转换/特征工程技术。例如,您可以将指数移动平均网格(AR(1) 系统或信号处理术语中的 IIR(1) 滤波器)作为新特征来模拟长期记忆,然后是滞后数据的线性组合(FIR 滤波器)模型短期记忆。请注意,您不 不必在模型中包含所有生成的特征,执行特征选择以选择一些 AR(1) 系统和滞后是一个好主意。我使用类似于我上面描述的方案从多个时间序列中提取特征,如下图所示。

在此处输入图像描述

另一种常用的技术是对时间序列数据执行无监督的特征提取方法。例如,您可以使用 PCA 并仅保留最主要的主成分,或者您可以使用离散(余弦)傅里叶变换并仅保留最强的成分。还有其他变换,如 Haar 小波,可在某些领域用于从时间序列中提取特征。

对于这个问题,我倾向于使用一个非常标准的答案:你的理论有什么建议?一个月前的雨真的会影响流量吗?一年前?十年?10分钟?当然有一些土壤研究(这是一件事,我有一个研究它的家庭成员!),这给出了一些提示。

如果您只是需要最好的预测并且您对原因不感兴趣,那么理论至少可以为您提供一些测试和试验(猜测和祈祷)步骤的起点。

除此之外,时间序列分析还有一些基本步骤来选择滞后结构以用于 VAR 模型。这个答案可能是一个很好的起点。