LSTM 特征选择过程

数据挖掘 时间序列 特征选择 lstm
2021-09-28 09:45:45

我们需要用 LSTM 模型实现一个时间序列问题。

但是,在实现相同功能的同时,我面临的主要挑战是特征选择问题。因为我们的数据集包含 2300 个观测值和 600 个特征。而且我们已经知道有很多功能根本不相关。但是,没有人具有领域专业知识来确认哪个功能是相关的。

我试过…

  1. 所有 600 个特征,[X 的形状变为 2280 X 20 X 600(如果时间步长为 20)]。准确率很差53-55%。

  2. 将单列视为预测变量(我们想要预测的特征)[X 的形状变为 2280 X 20 X 1(如果时间步长为 20)]。准确性也很差。

  3. 此外,尝试使用 PCA 将所有 600 个特征减少到 20 个特征[保留了大约 98% 的数据],但没有看到任何改进。

  4. 最后,我经历了一个非常漫长的过程。

    一个。在 600 个特征中,每个特征都使用 LSTM 算法单独尝试。选择给出最佳结果的特征。

    湾。所选特征与其余 599 个特征分别配对。然后,我选择提供最佳输出的最佳配对。

    C。最好的一对将进一步尝试单独使用其余 598 个功能,并且此过程仍在继续...

这样做之后,截至目前,我们得到了 6 个特征,准确率提高到了 65%。


我的问题是,这是我可以在时间序列问题中进行特征选择的唯一方法吗?

在任何非时间序列问题的情况下,有很多方法可以进行特征选择。在时间序列问题中进行特征选择的最佳方法是什么?

让我们再举一个例子……

假设我们开发了具有 10 个预测变量/特征的 LSTM 模型。该模型运行良好,我们获得了 80% 的准确率。

现在,不知何故又增加了 100 个与导出目标 y 无关的特性。

因此,由于模型将关注 120 个预测变量/特征,其中 100 个不相关,因此准确性将下降。

那么,我们将如何消除这 100 个不需要的特征呢?

2个回答

您是否尝试过在输出和用于建模的特征之间进行相关性测试?

我通常使用 Pearson's Correlation 来确定具有低相关因子的特征。然后我将它们从培训中删除。

在这里,我有DOC_DS用于建模DOC_US,我将它们都放在数据框df和我的其他功能中。从我对模型的跟踪来看,相关性较小的特征会影响模型的准确性。

在 Python 环境中:

print(np.array_str(np.corrcoef(df.DOC_DS,df.DOC_US)))

查看shap 库我认为这可以帮助你。

https://github.com/slundberg/shap