获得一个模型,其中每个特征向量都是过去的几个样本,标签是未来的几个样本?

数据挖掘 机器学习 Python 分类 回归 matlab
2022-03-05 10:00:33

所以,我有这个数据集,其中每个实例由 2 个变量的过去 20 个样本组成。标签是接下来的五个样本。所以每个实例看起来像这样:

Instance1_feature = [s1_var1 s2_var1 ... s20_var1 s1_var2 s2_var2 ... s20_var2]
Instance1_label = [s21_var1 s22_var2 ... s25_var5 s21_var2 s22_var2 ... s25_var2]


Instance2_feature = [s2_var1 s3_var1 ... s21_var1 s2_var2 s3_var2... s21_var2]
Instance2_label = [s22_var1 s23_var2 ... s26_var5 s22_var2 s23_var2 ... s26_var2]

所有数据都是分类的。var1 在 {1,2,3,4,5} 中取值;var2 取值 {6,7,8,9,10} 我熟悉机器学习。因此,我正在寻找一种方法来开发模型来预测新实例的标签。我有理由相信,通过查看过去的样本,可以预测未来的样本。就像股票价格一样。

任何帮助,代码示例的链接将不胜感激。

编辑这是我在开车时收集的数据集。鉴于我有过去 20 秒的数据,我想看看我是否可以预测接下来 5 秒的驾驶。这就是我创建这样的特征向量和标签的原因。值 {1,2,3,4,5} 和 {6,7,8,9,10} 是分类的,因为变量被分成多个段。

3个回答

我不确定为什么您的数据集看起来像这样(将未来结果的不同步骤作为单个标签),因此请提供有关数据上下文的一些信息。

但是你可以使用任何神经网络、模糊网络等等。您只需要将标签视为连续变量,然后在最后一步中循环您的网络输出。您可能不需要任何循环或动态网络,因为您的数据已经有很多延迟,这可能能够代表数据背后系统的动态行为。

您也可以改用多步提前预测。例如使用您的 Instant1_feature 预测或估计 [s21_var1 s21_var2]。然后使用看起来像 Instant2_feature 的特征向量,但将 [s21_var1 s21_var2] 的估计替换为 [s21_var1 s21_var2] 的实际值。

我希望这有帮助。

这看起来几乎是循环神经网络 (RNN) 模型的理想用例。我说的差不多,因为您的输出变量是 2 个单独的类向量,所以这部分有点繁琐。

使用 RNN 的主要优点是模型将建立在与etc 具有s1_var1相同类型的假设之上。而使用其他模型,您可以将时间序列展平为 10 x 20 = 200 长的向量,并且输出同样成一个 50 长的向量,并将整个问题视为单步监督学习,这样的模型将不包含相同的假设。s2_var1

对于您的问题,RNN 将有 10 个输入(对应于 2 个变量中的每一个的 5 个类)和 10 个输出。您将通过以正确的顺序 1 到 20 一次显示一个样本来训练它,然后继续运行网络 5 个步骤,将输出与预期进行比较。在进行预测时,您会做类似的事情,但随后只需将输出作为预测读取,一次一个。

有几个不同的 Python 库支持 RNN 模型,并且您可能想要探索不同的内部选择(例如使用 LSTM 层与 GRU)。我目前正在学习Keras框架,它支持 RNN 的一些选项。学习预测指数衰减正弦波的示例代码可能是开始尝试理解 Keras 模型的好地方 - 虽然这是一个回归,但它应该让您了解如何为此类系列构建 RNN ——基于数据。


这里 RNN 的替代方案可能是隐藏马尔可夫模型- 如果您对系统的内部状态有一些了解,那可能是一个更好的选择。

如果您希望一开始就保持直截了当,您可能希望将其视为标准的分类问题。第二步,您使用多步预测,正如@eulerleibniz 建议的那样。为了使这种方法可行,您只需预测下一秒(而不是五秒)的标签作为第一步。

您可以使用随机森林或梯度提升树算法。两者都需要很少的参数调整,表现得相当好,并且实现广泛可用(例如,在 Python 和 R 中)。您可以尝试使用这些算法解决您的问题。

在第二步中,您将重复整个过程,并将您的输入数据与刚刚生成的预测相结合,以预测下一个标签。以此类推,直到你得到接下来的五个标签。

如果你只是有点幸运,结果已经足够好了。如果不是,至少它们为像 RNN 这样更费力的方法提供了一个基准。