Introduction
由于许多人希望预测股票市场或他们最喜欢的加密货币,并在一夜之间成为百万富翁(对不起,不会发生),预测已经成为一个非常受欢迎的话题。这种预测过程通常需要接受某种数据或输入,并产生一个输出,对于我们乐观的灵魂来说,这将是他们的股票或密码在第二天下午的价格。我们在以前的一篇文章中讨论了塔肯斯定理的基础,详细介绍了它如何揭示有关动力系统的信息,或者换句话说,一组微分方程。其主要思想是,通过对相互作用的变量进行采样或在不同时间对单个变量进行重复测量,可以包含系统的信息。
这对预测意味着什么,Taken’s定理表明了什么?Taken’s定理指出,我们可以通过了解所有其他状态变量或跟踪单个变量足够长的时间来预测未来的变量。因此,如果我们有一个预测变量的机器学习模型,我们给它哪一组数据应该无关紧要。由于两组数据携带相同的信息,该模型能够以相似的精度进行预测。
Overview
- 模拟动力系统。
- 使用状态变量进行预测。
- 使用一个具有时滞的变量进行预测。
Simulate a Dynamic system: Lorentz Attractor
洛伦兹吸引子是一个简单的例子,因为它有三个不同的变量,这是众所周知的。我们使用Python包diffeqpy来模拟该系统。
d
x
d
t
=
σ
(
y
−
x
)
,
d
y
d
t
=
x
(
ρ
−
z
)
−
y
,
d
z
d
t
=
x
y
−
β
z
\begin{aligned} \frac{dx}{dt}&=\sigma(y-x), \\ \frac{dy}{dt}&=x(\rho-z)-y,\\ \frac{dz}{dt}&=xy-\beta z \end{aligned}
dtdxdtdydtdz=σ(y−x),=x(ρ−z)−y,=xy−βz
我们可以画出
(
x
,
y
,
z
)
(x,y,z)
(x,y,z)的时间函数,并看到著名的“蝴蝶”吸引子。
作为一个小题外话,什么是吸引子?一个吸引子有几个重要的特征:所有的轨迹将遵循一个类似蝴蝶的模式,一个轨迹将不会访问同一个点超过一次,并且开始彼此接近的轨迹将在以后看起来非常不同。
Forecast using State Variables: Tensorflow Time!
在这个例子中我们有数据
[
x
(
t
)
,
y
(
t
)
,
z
(
t
)
]
[x(t),y(t),z(t)]
[x(t),y(t),z(t)]并试图预测
x
(
t
+
τ
)
x(t+\tau)
x(t+τ)。然后我们训练一个简单的具有几层隐藏层的神经网络,(即训练网络在输入
[
x
(
t
)
,
y
(
t
)
,
z
(
t
)
]
[x(t),y(t),z(t)]
[x(t),y(t),z(t)]上产生
x
(
t
+
τ
)
x(t+\tau)
x(t+τ)。
其中我们的神经网络是几层矩阵,以‘relu’作为我们的激活函数。
让我们看看神经网络的表现!
在300次迭代之后,损耗(由平均绝对误差测量)达到0.0189。抛开测试数据,该组的损失为0.0173。
Forecast using One Variable: Takens’ Theorem in Work!
根据Takens定理,使用一个具有多个时滞的变量应该与我们之前的预测一样好。因此,我们不将 [ x ( t ) , y ( t ) , z ( t ) ] [x(t),y(t),z(t)] [x(t),y(t),z(t)]作为输入,而是输入 [ x ( t ) , x ( t − τ ) , x ( T − 2 τ ) ] [x(t),x(t-\tau),x(T-2\tau)] [x(t),x(t−τ),x(T−2τ)]。
![](https://i-blog.csdnimg.cn/blog_migrate/b9c270e6266011499a0fd3b931257a13.png)
在大约300次迭代之后,损失达到0.0441,而测试数据的损失是0.0415。
虽然这不如使用状态变量好,但它非常接近。这种差异可能是由于链接时间延迟数据的函数比使用状态变量更复杂(即问题不在于信息不足,而在于预测方法)。
还要注意,我们无法实现完美的预测,因为时间向前移动 τ \tau τ会产生自然不确定性。 τ \tau τ越小,我们就越接近完美预测。
Unanswered Questions
有几个问题可能会在你的脑海中徘徊:为什么我在上一节中只选择了三个时间滞后而不是四个?为什么我用这个特定的值来表示τ?好吧,我们实际上可以在这个简短的 gif 中看到这两个问题的答案:
x
(
t
)
x(t)
x(t) 与
x
(
t
−
τ
)
x(t−\tau)
x(t−τ) 的图形看起来最像原始的蝴蝶吸引子,大约
τ
=
0.1
\tau=0.1
τ=0.1,我们可以在下面看到。而较大的时间滞后会导致蝴蝶形状的解体。
因此,
τ
\tau
τ的值将能够最准确地重建仅用 x 值的基础动力学。此外,请注意,仅使用两个变量,我们可以看到非常准确的系统图片。事实证明,多使用一个变量只能给我们更多的信息,而使用三个以上的变量并不能给我们更多的信息。让我们看看我们的神经网络会这样:
What is the Takeaway? Can we Improve the Bitcoin Forecasts?
那么为什么我不能使用比特币上的神经网络致富呢?!?!比特币的基本动态极其复杂,有许多因素推动价格上涨和下跌。根据Takens定理,所需的时间滞后数量与影响系统的变量数量有关。原则上,比特币的历史价值可能有助于预测未来价值(如果潜在的动态变化不大),但你需要很多时间滞后。所需的数字可能太高,无法用于神经网络训练或任何其他类型的实际预测。