为深度学习增强时间序列数据

Posted

技术标签:

【中文标题】为深度学习增强时间序列数据【英文标题】:Augmenting Time Series Data for Deep Learning 【发布时间】:2021-01-30 13:47:54 【问题描述】:

如果我想通过我目前拥有的传感器对数据集应用深度学习,我需要大量数据,否则我们可能会看到过度拟合。不幸的是,传感器只活跃了一个月,因此数据需要扩充。我目前有数据框形式的数据,如下所示:

index   timestamp              cas_pre        fl_rat         ...
0       2017-04-06 11:25:00    687.982849     1627.040283    ...
1       2017-04-06 11:30:00    693.427673     1506.217285    ...
2       2017-04-06 11:35:00    692.686310     1537.114807    ...
....
101003  2017-04-06 11:35:00    692.686310     1537.114807    ...

现在我想用tsaug package 扩充一些特定的列。增强的形式可以是:

my_aug = (    
    RandomMagnify(max_zoom=1.2, min_zoom=0.8) * 2
    + RandomTimeWarp() * 2
    + RandomJitter(strength=0.1) @ 0.5
    + RandomTrend(min_anchor=-0.5, max_anchor=0.5) @ 0.5
)

扩充库的文档继续以下列方式使用扩充:

X_aug, Y_aug = my_aug.run(X, Y)

在对this 站点的进一步调查中,增强似乎影响了 numpy 数组。虽然它声明它是一种多变量增强,但不确定它是如何有效地发生的。

我想在 cas_prefl_rat 等浮点数值列中应用这种一致的扩充,以免与原始数据和每列之间的关系偏离太多。我不想应用它像timestamp 这样的行。我不确定如何在 Pandas 中执行此操作。

【问题讨论】:

您能否共享一个示例数据集(所有列,但只有几行)?我并不是特别了解时间序列增强,但我认为它会创建新的假样本 - 所以需要与这些相关的新时间戳 【参考方案1】:

这是我的尝试:

#Convert Pandas dataframe to Numpy array and apply tsaug transformations

import numpy as np
import pandas as pd
from tsaug import TimeWarp, Crop, Quantize, Drift, Reverse

df = pd.DataFrame("timestamp": [1, 2],"cas_pre": [687.982849, 693.427673], "fl_rat": [1627.040283, 1506.217285])

my_aug = (    
    Drift(max_drift=(0.1, 0.5))
)

aug = my_aug.augment(df[["timestamp","cas_pre","fl_rat"]].to_numpy())

print("Input:")
print(df[["timestamp","cas_pre","fl_rat"]].to_numpy()) #debug
print("Output:")
print(aug)

控制台输出:

Input:
[[1.00000000e+00 6.87982849e+02 1.62704028e+03]
 [2.00000000e+00 6.93427673e+02 1.50621728e+03]]
Output:
[[1.00000000e+00 9.13389853e+02 2.03588979e+03]
 [2.00000000e+00 1.01536282e+03 1.43177109e+03]]

您可能需要将时间戳转换为数字。

您使用的 tsaug 函数似乎不存在,因此我仅应用了drift() 作为示例。经过一些实验,默认情况下 TimeWarp() 不会影响时间戳(第 1 列),但 TimeWarp()*5 通过克隆每个时间戳 5 次来插入新样本。

【讨论】:

那么它实际上是按列扩充数据吗? 是的,在我的示例输出中,第 1 列是时间戳,第 2 列是 cas_pre,第 3 列是 f1_rat。仅修改了第 2 列和第 3 列。不相关,但经过一些实验,TimeWarp() 的功能与我最初想象的略有不同。将更新答案。 是的,我最终使用了您使用的一些内容并取得了一些成功,请同时更新您的答案。 当时间戳是 'Timestamp' 类型而不是 'float' 时它是如何工作的?

以上是关于为深度学习增强时间序列数据的主要内容,如果未能解决你的问题,请参考以下文章

推荐系统遇上深度学习(九十七)-[阿里]使用用户未点击行为增强序列推荐效果

深度学习训练营之数据增强

深度学习领域的数据增强

利用深度神经网络增强时间序列动量策略

新手入门深度学习 | 5-1:数据增强(Augly实现)

WIP:数据增强深度学习中的图像数据增强及实践