声明:
- 本文是系列课程的第一课
- 本文是对机器学习网站课程的翻译
- 尊重原作者,尊重知识分享者
时间序列预测与监督学习
时间序列预测可以被构建成监督学习问题,进而可以应用各种常见的机器学习算法。
通过本文你将学会:
- 什么是监督学习?机器学习中的预测算法是如何工作的。
- 滑动窗口方法及其在时间序列中的应用。
- 如何使用滑动窗口处理多变量(multivariate)时间序列和时间序列的多步(multi-step)预测。
监督学习
监督学习占了机器学习的半壁江山。
Y = f(X)
监督学习的目标是输入 X X ,获得。在此之前,需要先通过已知的训练集 (X,Y) ( X , Y ) 学习一个映射函数 f() f ( ) 。
下面是一个监督学习数据集的例子,通过 X X 预测。
X, y
5, 0.9
4, 0.8
5, 1.0
3, 0.7
4, 0.9
为什么叫监督学习?
因为这个学习过程一直有数据做引导,就像老师引导学生。
算法不断的对训练数据中的 X X 作出预测,并通过训练数据中的不断被修正,当获得一个满意的结果时,结束迭代。
监督学习可以分为两类:分类(classification)和回归(regression)。
- 分类:输出是离散的,是类别,如“红”和“蓝”、“正常”和“异常”。
- 回归:输出是连续的,是数值,回归问题又被称为预测。上面的监督学习的例子属于回归问题。
滑动窗口在时间序列中的应用
时间序列是有多个时间步的观测值组成的序列。将前几个时间步的值作为 X X ,当前时间步的值作为,时间序列预测就转化成了监督学习中的回归问题。
举个例子,我们有如下的时间序列:
time, measure
1, 100
2, 110
3, 108
4, 115
5, 120
用前一刻的值预测当前时刻的值,则:
X, y
?, 100
100, 110
110, 108
108, 115
115, 120
120, ?
将上面两者作比较,可以发现:
- 在监督学习中,输入 X X 是前一时刻的值,输出是当前值。
- 时间序列的顺序信息在监督学习中得以保留。
- 第一个时间步没有前一刻的信息,我们将会去掉第一行。
- 最后一行只有输入 X X ,改行将不会参与到模型训练中。
这种使用先前时间步的值预测当前时刻值的方法称为滑动窗口方法(sliding window method),又称窗口法或滞后法(lag method)。滑动窗口法是将时间序列转化为监督学习问题的常用方法。
使用滑动窗口处理多变量时间序列
如果在一个时刻有多个观测值会怎样?
一般来说,时间序列可分为:
- 单变量时间序列:一个时刻一个值,如温度序列和上面的例子。
- 多变量时间序列:一个时刻多个值。
自然,多变量时间序列更难分析。
下面,我们继续使用滑动窗口处理多变量时间序列。假设有如下数据,每一个时刻有两个观测值measure1和measure2,并且我们只对measure2感兴趣。
time, measure1, measure2
1, 0.2, 88
2, 0.5, 89
3, 0.7, 87
4, 0.4, 88
5, 1.0, 90
预测当前时刻的measure2,对于当前时刻的measure1=>如果两个变量相关的话,need it !!!上一刻的measure2=>need it!!!上一刻的measure1=>如果两个变量相关的话,最好也把它带上。
X1, X2, X3, y
?, ?, 0.2 , 88
0.2, 88, 0.5, 89
0.5, 89, 0.7, 87
0.7, 87, 0.4, 88
0.4, 88, 1.0, 90
1.0, 90, ?, ?
同样的,在训练过程中,第一行和最后一行要去掉。
如果我们同时对measure1和measure2感兴趣呢?
easy!
X1, X2, y1, y2
?, ?, 0.2, 88
0.2, 88, 0.5, 89
0.5, 89, 0.7, 87
0.7, 87, 0.4, 88
0.4, 88, 1.0, 90
1.0, 90, ?, ?
注意这次跟前面的不同在于变成了 X1,X2,y1,y2 X 1 , X 2 , y 1 , y 2 。
Unfortunately,大多数机器学习方法或人工神经网络搞不定多输出问题,需要一些改进才行。
用滑动窗口处理多步预测
如果要预测当前时刻和未来几个时刻怎么办?
依此,时间序列又可以分为:
- 单步预测:预测当前时刻值。
- 多步预测:预测从当前时刻开始多个时刻值。
前面的例子都是单步预测。
有很多对多步预测建模的方法,现在,我们只介绍滑动窗口法。有下列数据:
time, measure
1, 100
2, 110
3, 108
4, 115
5, 120
假设,我们要用时刻 t t 预测时刻和时刻 t+2 t + 2 。即1 =>(2, 3),2=>(3, 4),3=>(4, 5)…
X1, y1, y2
? 100, 110
100, 110, 108
110, 108, 115
108, 115, 120
115, 120, ?
120, ?, ?
再次同样的,第一行和最后一行不参与训练。
Certainly,只用一个值来预测两个值是有点太难了,可以用n个先前时刻的值来预测,n的取值要是具体问题而定。
想知道在Python中怎样将时间序列转化成监督学习问题吗?参考下面的博客或者其译文。
How to Convert a Time Series to a Supervised Learning Problem in Python