生成时间序列数据

数据挖掘 时间序列 数据
2021-09-25 15:15:13

如果训练数据不足,训练就会很糟糕。SMOTE 或 ADASYN 等技术可用于过采样。对于图像数据,我们可以模糊或改变角度以从同一张图像中生成更多样本。

我的问题是:你如何生成假的时间序列数据?

4个回答

ATM 我知道TSimulusTimeSynth以受控方式以编程方式生成数据(而不是生成随机数据)。

TSimulus 允许通过各种生成器生成数据。

TimeSynth 能够生成信号类型

Harmonic functions(sin, cos or custom functions)
Gaussian processes with different kernels
    Constant
    Squared exponential
    Exponential
    Rational quadratic
    Linear
    Matern
    Periodic
Pseudoperiodic signals
Autoregressive(p) process
Continuous autoregressive process (CAR)
Nonlinear Autoregressive Moving Average model (NARMA)

噪音类型

White noise
Red noise

如果您正在寻找一种生成数据的图形方式,TimeSeriesMaker是唯一能够做到这一点的工具。

如果你了解 Python,请使用 Faker。

https://github.com/joke2k/faker

您可以将Wolfram 语言应用到您的项目中。有一个免费的Wolfram 引擎供开发人员使用,如果您使用 Python 进行开发,那么您可以使用 Python 的Wolfram 客户端库在 Python中使用这些函数。

一个很好的起点是时间序列处理指南或随机过程指南;两者都包含指向时间序列过程指南的链接。

RandomFunction与您希望模拟的任何过程一起使用。例如,与MAProcess

SeedRandom[9]
res1 = RandomFunction[MAProcess[2, {.3, -.5}, 1], {0, 100}]

数学图形

返回的TemporalData对象在整个语言中都是已知的,因此可以从这里继续进一步的处理或分析。例如,使用ListLinePlot

ListPlot[res1, Filling -> Axis]

数学图形

可以使用"Values"属性直接查看这些值。用于Short限制输出。

res1["Values"] // Short
{2.00335, 1.15942, <<98>>, 2.7685}

也可以生成多个路径。例如,生成两条路径ARMAProcess

SeedRandom[11]
res2 = RandomFunction[ARMAProcess[0.1, {0.8, 0.1}, {-0.4}, 0.1], {0, 100}, 2]

数学图形

可视化ListLinePlot

ListLinePlot[res2]

数学图形

"Paths"属性将路径作为列表返回。

res2["Paths"] // Short
{{{0,0.275976}, <<99>>, {100, 0.766177}}, {<<1>>}}

"Components"属性返回TemporalData每个路径的对象。

res2["Components"]

数学图形

ListLinePlot /@ res2["Components"]

数学图形

希望这可以帮助。

如果您想用模拟的时间序列数据训练模型,您首先需要获取基础数据(您的“样本”)的特征/属性。意味着您必须检查/做出关于均值和方差的假设。请记住,您使用的是回报/相对变化——而不是时间序列中的实际 LEVEL INPUT!

为什么?原因级别时间序列具有“记忆”效应 - 这意味着即使您比较从两个独立和随机分布中提取的 2 个时间序列,您也会获得相关性。这种“错误”在统计学中通常被称为“虚假回归”。

检查更多详细信息/示例。

但是,如前所述,您可以使用:

或者: