增强时间序列数据以供深度学习使用

3
如果我想将深度学习应用于我目前拥有的传感器数据集,我需要大量的数据,否则我们可能会看到过度拟合。不幸的是,这些传感器仅活跃了一个月,因此需要增加数据。我目前拥有的数据以以下形式显示为数据框:
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来增强一些特定的列。增强可以采用以下形式:

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)

在进一步研究这个网站后,似乎扩充影响的是numpy数组。虽然它声明了它是一个多元扩充,但不太确定它是如何有效地进行的。
我想在浮点数数字列(如cas_prefl_rat)上应用这种一致的扩充,以便不会与原始数据和每个列之间的关系产生太大分歧。我不想将其应用于像timestamp这样的行中。我不确定如何在Pandas中实现这一点。

你能分享一个示例数据集吗(所有列,但只有几行)?我对时间序列增强不是特别了解,但我认为它会创建新的虚假样本 - 因此这些样本将需要有新的时间戳关联吗? - kabdulla
1个回答

2
这是我的尝试:
#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次来插入新样本。

那么它实际上是通过列来增强数据吗? - SDG
是的,在我的示例中,第1列是时间戳,第2列是cas_pre和第3列是f1_rat。只有第2列和第3列被修改了。虽然不相关,但经过一些实验,TimeWarp()函数的工作方式与我最初想象的略有不同。我会更新答案。 - Zack Henkusens
嗯,我最终使用了你所用的一些代码,并取得了一些成功。请在此期间更新你的回答。 - SDG
时间戳是“Timestamp”类型而不是“float”类型时,它是如何工作的? - parvaneh shayegh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接