非固定长度序列数据的机器学习?

机器算法验证 机器学习 神经网络 顺序模式挖掘
2022-03-26 07:30:10

我有一个问题,我想将机器学习(监督分类)应用到,但是,数据是连续的,并且数据向量中的每一行都有自己的长度。这意味着每行中的特征数量是非恒定的(想想时间序列数据 - 例如 - 逐日数据)。所以这意味着数据的顺序是有意义的,我们不能例如用零填充以使所有行都具有相同的长度,因为这会引入虚假信号,这会使我的分类器感到困惑。至少这是我目前的看法。

  • 一种可能的方法是使用例如窗口函数并简单地计算(每天)运行的事物总和。但这意味着我正在丢失有关历史的信息,因为每一天都必须在矩阵中表示为自己的行,以使所有行都有固定数量的列,因此我可以应用经典的 ML 算法。我想避免这种情况,因为我认为这是一种次优的方法 - 但我会听取任何反对我意见的论点。

  • 我在神经网络方面没有太多经验,但我相信有些架构支持非固定长度的序列数据,例如 RNN?有没有人有我可以考虑的好的链接/资源?

我欢迎从业者就如何处理这个建模问题提出想法和建议。谢谢!

问候,米

2个回答

看来你在这里问了两个问题:

  1. 如何处理不同样本的特征数量不同的情况,即某些特征要么不适用于某些样本,要么不可用
  2. 如何对时间序列数据进行监督分类

关于问题1,这取决于。每个样本确实需要具有相同数量的特征。一些模型,即基于决策树的模型,可以明确地处理缺失/NA 数据。其他的,比如逻辑回归,需要序数特征,不能处理分类特征。在这种情况下,可能值得引入额外的二元特征(表示特征 X 是否存在/适用),并为特征 X 选择一些适当的值以防它缺失/不适用。一个好的选择将取决于具体问题。

问题 2:您可以选择手动工程特征,或者尝试可以尝试自动处理数据的时间结构的模型。大多数模型假设每个样本独立于其他样本;理想情况下,您将应用一些特征工程来使您的时间序列平稳,并使用您的领域知识来确定哪些历史数据对每个样本很重要以及应该如何表示它。Z 分数、移动平均线、方差等在这里都可能有用。如果您有大量数据,您可能会尝试使用 RNN,但根据我的经验,只有当您拥有大量数据并且您不知道哪些功能可能有用时才值得这样做。

无论您选择使用哪种模型,设置适当的验证和测试框架绝对至关重要。对于时间序列,您需要格外小心。例如,您需要决定使用未来的数据来训练您的模型是否合适,是否需要在训练集周围丢弃一些数据等。不要只是盲目地将数据随机抽样到验证/测试集中,这可能会给您非常有偏见的估计,这将是没有用的。

我还建议独立研究每个问题,这两个问题之前都已在此 stackexchange 上得到解决。祝你好运!

看起来 RNN 将是解决您的问题的好模型。

它们可以处理不同长度的时间序列序列。基本上,他们在其内部状态中实现了一种记忆机制,该机制允许“记住”发生的事情,以便考虑过去以决定未来。

然而,它们是非常通用的模型,可用于许多领域。一般来说,您可以找到不同类型的 RNN,可能常见的是LSTMGRU

在我看来,对Colah 的博客有一个很好的 LSTM 解释

相反,如果您正在寻找更实用的东西,我建议您使用PyTorch 教程