当训练数据位于多个不同长度时间序列的 csv 文件中时,如何提供 LSTM?

Posted

技术标签:

【中文标题】当训练数据位于多个不同长度时间序列的 csv 文件中时,如何提供 LSTM?【英文标题】:How to feed LSTM when training data is in multiple csv files of time series of different length? 【发布时间】:2019-07-14 15:30:30 【问题描述】:

我正在运行 LSTM 来对每位患者的医疗记录进行分类。话虽如此,对于每位患者(一次观察),我都有一个 CSV 文件。整个数据集是多个 CSV 文件,每个文件都是时间序列的 DataFrame。 这不是很明显,因为用图像和时间序列输入 LSTM 之间有一个小的区别,它是序列的大小。 CNN 假设输入具有相同的大小,但这里我们有不同长度的输入

问题:

这种情况下如何喂 LSTM?

我敢肯定,如果您熟悉图像分类,您可以帮助解决我的问题,但这不仅仅是相同的方法。

示例

对于一位患者,我有一个 DataFrame,其中包含我想在 LSTM 中使用的所有记录。

df.shape
Out[29]: (5679000, 4) 
# The 5679000 change from one patient to another but 4 columns are fixed

看看这里:

df.head(4)

Out[30]: 

   AIRFLOW     SaO2    ECG  Target  
0    -34.0  31145.0  304.0     0.0  
1    -75.0  31145.0  272.0     0.0  
2    -63.0  31145.0  254.0     0.0  
3    -57.0  31145.0  251.0     1.0  
4    -60.0  31145.0  229.0     0.0  

问题:

对我的网络有什么建议吗?

【问题讨论】:

您的问题是什么?这段代码有点混乱。如果您的每个数据点都有可变数量的时间步,那么您的批量大小需要为 1,因此您需要以小批量的方式进行训练,而不是一次全部训练。也就是说,除非您可以将具有相同时间步数的患者分组或固定时间步数。另外,你为什么使用批量大小作为第一个 LSTM 中的单元数? @LukeDeLuccia 你所问的正是我想要弄清楚的! mini_batches,batch_size,...如何正确执行?任何改进建议将不胜感激 【参考方案1】:

在不同长度序列的情况下,你有两种我知道的主要方法:

1- 使用批量大小 1 训练您的模型,这并不理想,因为它需要多少时间以及它需要的资源。

2- 您可以确定最长的序列,将该长度用作批量大小,将填充值添加到其他序列并在模型训练期间忽略这些填充值。

【讨论】:

【参考方案2】:

由于您的数据点具有可变的序列长度,因此您无法轻松地一次训练您的网络。相反,您必须以大小为 1 的小批量进行训练或固定您的序列长度,尽管根据您正在处理的数据,后者可能没有意义。

看看 Keras 函数train_on_batch。使用它,您可以使用每个患者来训练您的模型,尽管使用批量大小 1 有其自己的 issues。

至于型号,我建议使用Keras functional API。如果你想尝试一些简单的事情,只需使用可变长度的输入序列和3 的特征大小。这应该给你一个基线,这是我假设你想要的函数名称。像这样的:

input_ = Input(shape=(None, 3))
x = LSTM(128)(input_)
output = Dense(1, activation='sigmoid')(x)
model = Model(input_, output)

【讨论】:

【参考方案3】:

lstm_baseline(df[['AIRFLOW','SaO2','ECG']], df['Target'], 64)

【讨论】:

64 指的是什么? 你的回答很明显!这是针对一名患者的,而不是所有的训练数据! 64 是你的 batch_size。 我认为你不能在多个患者身上训练这个 LSTM。在这里,网络会考虑数据列的一些先前值,以进行预测。但是将一位患者的数据用于下一位患者是否有意义?

以上是关于当训练数据位于多个不同长度时间序列的 csv 文件中时,如何提供 LSTM?的主要内容,如果未能解决你的问题,请参考以下文章

从多个 csv 文件训练 LSTM

在同一个 CSV 文件中保存多个不同大小的列/变量

从多个 csv 文件创建 libsvm 用于 xgboost 外部内存训练

如何从 csv 文件中提取图像、标签并使用 Torch 创建训练集?

如何附加来自多个 csv 文件的值?

如何使用 python 从位于同一目录中的多个 zip 文件夹中读取 csv 文件?