Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 推荐在timeseries数据上训练自动编码器的方法_Python_Tensorflow_Deep Learning_Autoencoder - Fatal编程技术网

Python 推荐在timeseries数据上训练自动编码器的方法

Python 推荐在timeseries数据上训练自动编码器的方法,python,tensorflow,deep-learning,autoencoder,Python,Tensorflow,Deep Learning,Autoencoder,我想训练飞机系统时间序列上的自动编码器,以便能够识别特定系统的模式何时显示异常(即:实际模式将“显著”偏离重建信号)。 我在两种不同的预处理和培训模型的方法之间犹豫不决,我想参考你们的集体智慧和经验来指导我 首先快速了解数据的结构: 每列都是特定系统不同航班的时间戳集合。 由于飞机A上的System1完全独立于飞机B上的System1,因此我不能简单地通过将“sequence_Length”的片段批处理在一起并将其传送到网络,以“常规方式”传送前面的数据集。这只会在我从同一架飞机上读取数据时起

我想训练飞机系统时间序列上的自动编码器,以便能够识别特定系统的模式何时显示异常(即:实际模式将“显著”偏离重建信号)。 我在两种不同的预处理和培训模型的方法之间犹豫不决,我想参考你们的集体智慧和经验来指导我

首先快速了解数据的结构:

每列都是特定系统不同航班的时间戳集合。 由于飞机A上的System1完全独立于飞机B上的System1,因此我不能简单地通过将“sequence_Length”的片段批处理在一起并将其传送到网络,以“常规方式”传送前面的数据集。这只会在我从同一架飞机上读取数据时起作用,但一旦我切换飞机,就没有连续性

方法1:增量培训 我会以“常规方式”训练模型,每次只使用一架飞机的数据。在每一次迭代中,我都会继续训练同一个模型,但训练的批次不同,来自不同的飞机。 每个迭代(希望)都在前一个迭代的基础上改进

优点:就预处理而言,这是一种“简单”的方法+我可以利用记忆效应来识别更长的模式(使用RNN或LSTM层)

缺点:…只要系统不尝试从不同飞机的批次中查找模式,情况会是这样吗

方法2:“心电图方法” 这一个的灵感来自ECG数据集。与其将数据集视为一个大的timeseries流,我可以考虑长期飞行。 在这种情况下,我会对每个航班重新取样,使其长度相同。然后对模型进行训练,通过查看独立飞行的集合来识别飞行过程中的错误,而实际的时间顺序(飞行间隔)将不再相关。这样我就可以一次完成所有数据集的训练

优点:简化训练+“顺序长度”等同于飞行持续时间,因此更易于操作

缺点:重采样可能涉及压缩和信息丢失+通过假设每个航班彼此独立,我防止系统发现多个航班上出现的更长时间模式

当然,一个简单的答案是“两个都试一下,自己看看”,如果不是时间和资源的限制,我会全力以赴

关于我应该先尝试什么,你有什么经验或建议吗


谢谢您的帮助,

除了正常数据外,您还有很多异常数据吗?我想对于选项1,模型将只学习在确定异常数据与非异常数据时有效或有用的跨飞机模式。您可能需要格外小心,以确保数据集中不同飞机的存在不会严重不平衡,否则您可能会看到this@DerekG,异常数据相对较少且未标记,大多数飞行发生时没有问题,因此可以合理假设。跨飞机模式是一个很好的观点,理想情况下,我不需要模型来学习飞机(ac)的特定模式。我们有旧的和新的AC,所以旧的显然有更多的数据,我不知道这是否就是你所说的“不平衡”?对,所以关于第一个异常检测通常是一个有点困难的问题,因为异常的稀疏性和所有异常中这些异常的有限代表性。关于数据不平衡,如果你说有95%的旧AC数据,你可能会训练一个模型,将95%的时间优先于正确的,而不是正确地合并其他5%的数据。这是一个常见的问题,在训练分类器与类不平衡的数据;一个训练不好的模型总是会预测大多数类,以最大限度地提高正确预测的几率。@DerekG,这就是为什么我不是在训练分类器,而是在训练自动编码器。该模型将学习“模拟”好信号,而不会过度拟合。实际信号和重建之间的重建误差将有助于识别何时存在明显偏离正常值的情况。除了正常数据外,您是否还有大量异常数据?我猜对于选项1,该模型将只学习在确定异常与非异常数据时有效或有用的跨飞机模式。您可能需要格外小心,以确保数据集中不同飞机的存在不会严重不平衡,否则您可能会看到this@DerekG,异常数据相对较少且未标记,大多数飞行发生时没有问题,因此可以合理假设。跨飞机模式是一个很好的观点,理想情况下,我不需要模型来学习飞机(ac)的特定模式。我们有旧的和新的AC,所以旧的显然有更多的数据,我不知道这是否就是你所说的“不平衡”?对,所以关于第一个异常检测通常是一个有点困难的问题,因为异常的稀疏性和所有异常中这些异常的有限代表性。关于数据不平衡,如果你说有95%的旧AC数据,你可能会训练一个模型,将95%的时间优先于正确的,而不是正确地合并其他5%的数据。这是一个常见的问题,在训练分类器与类不平衡的数据;一个训练不好的模型总是会预测大多数类,以最大限度地提高正确预测的几率。@DerekG,这就是为什么我不是在训练分类器,而是在训练自动编码器。该模型将学习“模拟”好信号,而不会过度拟合。实际信号与重构之间的重构误差将有助于识别