雷锋网按:本文作者 Jason Brownlee 为澳大利亚知名机器学习专家,对时间序列预测尤有心得。原文发布于其博客。雷锋网编译。

Jason Brownlee

机器学习方法,比如深度学习,是可以用来解决时间序列预测问题的。

但在使用机器学习之前,时间序列问题需要被转化为监督学习问题。从仅仅是一个序列,变成成对的输入、输出序列。

这篇教程里,你将学到如何把单变量、多变量时间序列问题转为机器学习算法能解决的监督学习问题。本教程包含:如何创建把时间序列数据集转为监督学习数据集的函数;

如何让单变量时间序列数据适配机器学习

如何让多变量时间序列数据适配机器学习

现在我们开始。

时间序列 vs. 监督学习

正式开始前,我们需要更好地理解时间序列和监督学习的数据形式。时间序列是一组按照时间指数排序的数字序列,可被看成是一列有序的值。比如:

监督学习问题由输入(X)和输出(y)速成,其算法能学习如何根据输入模式预测输出模式。

比如:

Pandas shift() 函数

对于把时间序列数据转化为监督学习问题,这是一个关键的函数。

给定一个 DataFrame, shift() 函数可被用来创建数据列的副本,然后 push forward (NaN 值组成的行添加到前面)或者 pull back(NaN 值组成的行添加到末尾)。为了给时间序列数据集创建滞后观察(lag observation)列以及预测观察(forecast observation)列,并按照监督学习的格式来,这是必须的操作。

我们来看看一些 shift 函数的实操例子。

我们可以定义一个由 10 个数字序列组成的伪时间序列数据集,该例子中,DataFrame 中的单个一列如下所示:

运行该例子,输出时间序列数据,每个观察要有对应的行指数。

我们通过在顶端插入新的一行,用一个时间步(time step)把所有的观察降档(shift down)。由于新的一行不含数据,可以用 NaN 来表示“无数据”。

Shift 函数能完成该任务。我们可以把处理过的列插入到原始序列旁边。

运行该例子,使数据集有了两列。第一列是原始观察,第二列是 shift 过新产生的列。

可看到,把序列向前 shift 一个时间步,产生了一个原始的监督学习问题,虽然  X 、y 的顺序不对。无视行标签的列。由于 NaN 值,第一行需要被抛弃。第二行第二列(输入 X)现实输入值是 0.0,第一列的值是 1 (输出 y)。

我们能看到,如果在 shift 2、3 ……重复该过程,要如何创建能用来预测输出值 y 的长输出序列(X)。

Shift 操作器可以接受一个负整数值。这起到了通过在末尾插入新的行,来拉起观察的作用。下面是例子:

运行该例子显示出,新的一列的最后一个值是一个 NaN 值。可以看到,预测列可被作为输入 X,第二行作为输出值  (y)。输入值 0 就可以用来预测输出值 1。

技术上,在时间序列预测术语里,当前时间是(t),未来是(t+1, t+n) 它们都是预测时间。过去的观察 (t-1, t-n) 被用来做预测。对于一个监督学习问题,在一个有输入、输出模式的时间序列里,我们可以看到如何用正负 shift 来生成新的 DataFrame 。

这不仅可用来解决经典的 X -> y 预测问题, 还可用到输入、输出都是序列的 X -> Y 上。

另外,shift 函数也在所谓的多元时间序列问题上有效。这种情况下,并不是时间序列不只有一组观察,而是多组(举个例子,气温和气压)。所有时间序列中的变量可被向前或向后 shift,来创建多元输入输出序列。更多详情下文会提到。

The series_to_supervised() 函数

给定理想的输入、输出序列长度,我们可以用 Pandas 里的 shift() 函数自动生成时间序列问题的框架。

这是一个很有用的工具。它帮助我们用机器学习算法探索同一个时间序列问题的不同框架,来找出哪一个将会产生具有更好效果的模型。这部分中,我们为 series_to_supervised() ,一个新的 Python 函数定义。它能把单变量、多变量时间序列转化为监督学习数据集。

该函数有四个参数:Data:作为一个列表或 2D NumPy 阵列的观察序列。必需。

n_in: 作为输入 X 的 lag observation 的数量。值可能在 [1..len(data)] 之间。可选。默认为 1 。

n_out: 作为输出 y 的观察的数量。值可能在 [0..len(data)-1] 之间。可选。默认为 1 。

dropnan: 不管随着 NaN 值是否丢掉一些行,它都是布尔值(Boolean)。可选。默认为 True。

函数返回一个单个的值:return: 序列的 Pandas DataFrame 转为监督学习。

新数据集创建为一个 DataFrame,每一列通过变量字数和时间步命名。这使得开发者能设计各种各样时间步序列类型的预测问题。

当 DataFrame 被返回,你可以决定怎么把它的行,分为监督学习的 X 和 y 部分。这里可完全按照你的想法。该函数用默认参数定义,因此,如果你仅仅用你的数据调用它。它会创建一个 X 为 t-1,y 是 t 的 DataFrame。

该函数兼容 Python 2 和 Python 3。完整函数在下面,包括注解。

有了整个的函数,现在可以开始探索怎么用它。

一步的单变量预测

在时间序列预测中,使用滞后观察(比如 t-1)作为输入变量来预测当前时间不,是通用做法。这被称为一步预测(one-step forecasting)。下面的例子,展示了如何一个滞后时间步( t-1)预测当前时间步(t).

运行例子,输出改造过的时间序列的输出。

可看到,观察被命名为“var1”,输入观察被命名为  (t-1),输出时间步被命名为 (t)。还可以看到,NaN 值得行,已经自动从 DataFrame 中移除。我们可以用随机数字长度的输入序列重复该例子,比如 3。这可以通过把输入序列的长度确定为参数来实现。比如:

data = series_to_supervised(values, 3)

完整例子如下:

再一次,运行例子输出改造的序列。可以看到输入序列是正确的从左到右的顺序。输出变量在最右边进行预测。

多步骤预测还是序列预测

有另一类预测问题,是用过去的观察,来预测出将来贯彻的一个序列。这可以被称作序列预测或者多步骤预测。通过确定另一个参数,我们能把一个时间序列转化为序列预测。比如,我们可以把一个输入序列为两个过去观察,要预测两个未来观察的序列问题,进行如下转化:

data = series_to_supervised(values, 2, 2)

完整例子如下:

运行该例子,显示出分别把 (t-n)、(t+n) 作为输入、输出变量,以及把当前观察 (t)作为输出之间的区别。

多元预测

另一种重要的时间序列类型被称为多元时间序列。这时有对多个不同度量(measure)的观察,以及我们对预测其中的一个或更多的兴趣。比如说,也许有两组时间序列观察 obs1 和 obs2 ,我们想要预测其中之一,或者两个都预测。我们可用同样的方法调用 series_to_supervised()。举个例子:

运行这个例子会输出数据的新框架,显示出两个变量在一个时间步下的输入模式,以及两个变量一个时间不的输出模式。

取决去问题的具体内容。可以随机把列分为 X 和 Y 部分,比如说,如果当前观察 var1 也被作为输入提供,那么只有 var2 会被预测。

通过上面这样确定具体的输入输出序列长度,可轻松完成多元时间序列的预测。下面是一个把一个时间步作为输入,两个时间步作为预测序列的转化例子。

运行该例子会显示改造过的大 DataFrame。

建议:拿你自己的数据集做实验,试试多个不同的框架来看哪个效果更好。

由浅入深,清华大学邓志东教授的神经网络培训!

该课程将系统介绍人工智能中的神经网络,特别是深度学习的发展现状、基本原理和主要方法。包括:人工智能综述,生物神经系统,人工神经元模型,BP网络,Hopfield网络,深度卷积神经网络(CNN),长短期记忆网络(LSTM)和深度强化学习等。重点分析若干典型CNN模型,并结合具体应用案例,进行编程实操剖析。

课程将补充介绍最新的科研成果与前沿领域(提供50篇以上最原始与最新的人工神经网络代表性英文论文,包括深度学习2016年的最新论文),强调各种理论方法在解决实际问题中的综合应用。雷锋网(公众号:雷锋网)倾情推荐!

相关文章:

雷锋网版权文章,未经授权禁止转载。详情见转载须知。

怎么把series变为datamate_如何把时间序列问题转化为监督学习问题?通俗易懂的 Python 教程...相关推荐

  1. 如何将时间序列问题转化为监督学习问题

    如何将时间序列问题转化为监督学习问题 如何将时间序列问题转化为监督学习问题 1.学习目标: 2.时间序列 vs 监督学习 3.pandas shift() 函数 4.series_to_supervi ...

  2. 时间序列预测01:如何将时间序列预测转化为监督学习问题

    时间序列预测可以被构造为一个监督学习问题.通过对时间序列数据的重构,可以针对不同问题使用相关的机器学习算法.本文介绍了如何将时间序列问题重新构造为机器学习中的监督学习问题. [时间序列预测/分类] 全 ...

  3. python处理时间序列非平稳_手把手教你用Python处理非平稳时间序列

    简介 预测一个家庭未来三个月的用电量,估计特定时期道路上的交通流量,预测一只股票在纽约证券交易所交易的价格--这些问题都有什么共同点? 它们都属于时间序列数据的范畴!如果没有"时间" ...

  4. Keras之TCN:基于keras框架利用时间卷积网络TCN算法对上海最高气温实现回归预测(把时间序列数据集转化为有监督学习数据集)案例

    Keras之TCN:基于keras框架利用时间卷积网络TCN算法对上海最高气温实现回归预测(把时间序列数据集转化为有监督学习数据集)案例 目录 利用时间卷积网络TCN算法对上海最高气温实现回归预测(把 ...

  5. 时间序列-预测:概述【Time Series Forecasting (TSF) 】【时间序列既可以做回归任务,也可以做分类任务】【预测是回归问题,不是分类问题】

    多元时间序列 (Multivariate time series MTS)的 预测广泛应用于气象和交通等各个领域. 由于数据收集.传输和存储的限制,现实世界的 MTS 数据通常包含缺失值,使得应用现有 ...

  6. python时间序列动图_手把手教你用Python进行时间序列分解和预测

    来源:数据派THU(ID:DatapiTHU) ▔ 作者:Mohit Sharma 翻译:王闯(Chuck) 校对:王可汗 预测是一件复杂的事情,在这方面做得好的企业会在同行业中出类拔萃.时间序列预测 ...

  7. 基于最小二乘支持向量机(LS-SVM)进行分类、函数估计、时间序列预测和无监督学习附Matlab代码

    ​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.

  8. 基于最小二乘支持向量机(LS-SVM)进行分类、函数估计、时间序列预测和无监督学习(Matlab代码实现)

  9. 【廖雪峰 python教程 课后题改编】利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字

    原题目: # -*- coding: utf-8 -*- #输入名字,变成首字母大写,其他字母小写的标准格式 def normalize(name):str1 = ''for i, ch in enu ...

最新文章

  1. it工程师和码农的区别_毕业生 | IT行业岗位详解
  2. tablayout 增加数字小标_为TabLayout添加角标的最简单方法
  3. CRM中间件里的CSA队列有什么用
  4. 找出SAP OData service出错根源的小技巧
  5. 台电u盘量产工具_简单几步,让U盘起死回生
  6. 三星国行S10 5G版本要来了?这次它抢在了国产手机的前面
  7. 晨哥真有料丨明知道没有结果的爱情,还要继续下去吗?
  8. pyqt5 发送键盘信号_Python教程 | Pyqt5实战教程之操作交互处理,原来这么简单!...
  9. HDU 1068 Girls and Boys(最大独立集合 = 顶点数 - 最大匹配数)
  10. 用Python3.6操作HBase之HBase-Thrift
  11. 社会计算经典谈——书籍销量预测
  12. Idea 插件:快速JSON转对象
  13. java根据公历获得农历1921年到2050年
  14. 如何查找并修改CAD图纸中的标注文字?
  15. springboot2集成shiro认证鉴权(上篇)
  16. tradeblazer mysql_交易开拓者(TradeBlazer)上手指南
  17. 测测你的眼睛对色差的辨识度?抱歉我开挂了……【JavaScript脚本实现找色差小游戏自动刷关】
  18. 重庆科技学院计算机考研资料汇总
  19. 收藏||二叉树的遍历:颜色标记法(前序、中序、后序通用)
  20. PPT制作技巧汇总之图形对象与多媒体应用(office 2007)

热门文章

  1. 目标检测,目标识别的SAR数据集构建和标注
  2. OpenGL编程指南4:双缓冲实现运行
  3. 保存delphi中的library path
  4. 使用go语言GUI库fyne绘制一个交通标志
  5. strhcr函数的使用简单示例
  6. java.io.FileNotFoundException: class path resource [springmvc.xml] cannot be opened
  7. Java判断字符串是否是整数
  8. python向sqlite数据库中插入数据(变量)
  9. 【✅windows奇怪的知识增加了✅】windows系统下快速删除海量小文件方法
  10. hdu-4825(01字典树)