本篇文章3271字,读完约8分钟
雷锋。(公开号码:雷锋。本文作者詹森·布朗利是澳大利亚著名的机器学习专家,他在时间序列预测方面有着特殊的经验。原文发表在博客上。雷锋编的。
jason brownlee
机器学习方法,如深度学习,可以用来解决时间序列预测问题。
但是在使用机器学习之前,时间序列问题需要转化为监督学习问题。从一个序列到一对输入和输出序列。
在本教程中,您将学习如何将单变量和多变量时间序列问题转化为可通过机器学习算法解决的监督学习问题。本教程包括:
如何创建将时间序列数据集转换为监督学习数据集的函数;
如何使单变量时间序列数据适应机器学习
如何使多元时间序列数据适应机器学习
现在让我们开始吧。
在监督学习正式开始之前,我们需要更好地理解监督学习的时间序列和数据形式。时间序列是按时间索引排序的一系列数字,可以看作是一系列有序的值。例如:
监督学习问题由输入(x)和输出(y)加速,其算法可以学习如何根据输入模式预测输出模式。
例如:
Pandashhift()函数是将时间序列数据转化为监督学习问题的关键函数。
给定一个数据帧,shift()函数可用于创建数据列的副本,然后向前推(由nan值组成的行被添加到前面)或向后拉(由nan值组成的行被添加到末尾)。为了创建时间序列数据集的滞后观测列和预测观测列,根据监督学习的格式,这是必要的操作。
让我们看一些移位函数的实例。
我们可以定义一个由10个数字序列组成的伪时间序列数据集。在本例中,数据框中的一列如下:
运行此示例以输出时间序列数据,并且每个观察都应该有一个相应的行索引。
我们通过在顶部插入一条新的线,将所有观察值按时间步长下移。由于新行不包含数据,nan可用于表示“无数据”。
移位功能可以完成这个任务。我们可以在原始序列旁边插入已处理的列。
运行此示例,使数据集有两列。第一列是原始观察,第二列是移位后新生成的列。
可以看出,将序列向前移动一个时间步长会产生一个原始的监督学习问题,尽管X和Y的顺序是错误的。忽略行标签的列。由于nan值,第一行需要被丢弃。第二行和第二列的实际输入值(输入x)为0.0,第一列的值为1(输出y)。
我们可以看到如何创建一个长的输出序列(x),它可以用来预测输出值y,如果这个过程在第2档、第3档…
移位运算符可以接受负整数值。这是通过在末尾插入一个新行来起到观察的作用。以下是一个例子:
运行此示例显示新列的最后一个值是nan值。可以看出,预测列可以作为输入x,第二行可以作为输出值(y)。输入值0可用于预测输出值1。
从技术上讲,在时间序列预测方面,当前时间是(t),未来是(t+1,t+n),都是预测时间。过去的观测(t-1,t-n)被用来做预测。对于有监督的学习问题,在具有输入和输出模式的时间序列中,我们可以看到如何使用正负移位来生成新的数据帧。
这不仅可以用于解决经典的x -> y预测问题,还可以用于输入和输出都是序列的x -> y。
此外,移位函数在所谓的多元时间序列问题中也是有效的。在这种情况下,时间序列中不仅有一组观测值,还有多组观测值(例如,温度和压力)。所有时间序列中的变量可以向前或向后移动,以创建多变量输入输出序列。更多细节将在下文提及。
序列到监督()函数给出了理想的输入和输出序列长度,因此我们可以在熊猫中使用shift()函数来自动生成时间序列问题的框架。
这是一个非常有用的工具。它帮助我们用机器学习算法探索同一时间序列问题的不同框架,并找出哪一个将产生更好的模型。在这一部分,我们定义了一个新的python函数series_to_supervised()。它可以将单变量和多变量时间序列转换成监督学习数据集。
该函数有四个参数:
数据:观察序列为列表或二维数组。必选。
N_in:作为输入x的滞后观测数。该值可能在[1...len(数据)]。可选。默认值为1。
N_out:作为输出y的观察数。该值可能在[0...len(数据)-1]。可选。默认值为1。
Dropnan:它是一个布尔值,表示是否将一些行与nan值一起删除。可选。默认值为真。
该函数返回一个值:
返回:熊猫的数据帧序列被转换成监督学习。
新的数据集被创建为一个数据框架,每个列都由可变单词的数量和时间步长来命名。这使得开发人员能够设计各种时间步长序列类型的预测问题。
当数据帧返回时,您可以决定如何将其行分成监督学习的X和Y部分。这正是你想要的。这个函数是用默认参数定义的,所以如果你用你的数据来调用它。它创建一个数据帧,其中x是t-1,y是t。
该函数与python 2和python 3兼容。完整的功能如下,包括注释。
现在你已经拥有了全部功能,你可以开始探索如何使用它了。
一步单变量预测在时间序列预测中,通常使用滞后观测值(如t-1)作为输入变量来预测当前时间。这被称为一步预测。以下示例显示滞后时间步长(t-1)如何预测当前时间步长(t)。
运行该示例以输出修改后的时间序列输出。
可以看出,观测值被命名为“var1”,输入观测值被命名为(t-1),输出时间步长被命名为(t)。您还可以看到,带有nan值的行已自动从数据框中删除。我们可以用一个随机数长度的输入序列重复这个例子,比如3。这可以通过将输入序列的长度确定为参数来实现。例如:
data = series_to_supervised(值,3)
一个完整的例子如下:
运行示例再次输出修改后的序列。您可以看到输入序列是从左到右的正确顺序。输出变量预测在最右边。
多步预测或序列预测有另一种预测问题,它使用过去的观察来预测将来要实现的序列。这可以称为序列预测或多步预测。通过确定另一个参数,我们可以将时间序列转换成序列预测。例如,我们可以将一个输入序列作为两个过去的观测值,并预测两个未来观测值的序列问题,并进行如下转换:
data = series_to_supervised(值,2,2)
一个完整的例子如下:
运行此示例显示了分别将(t-n)和(t+n)作为输入和输出变量与将当前观测值(t)作为输出变量之间的区别。
多元预测的另一个重要时间序列类型称为多元时间序列。此时,有许多不同度量的观察结果,我们有兴趣预测其中的一个或多个。例如,可能有两组时间序列观测obs1和obs2,我们希望预测其中一组,或者两者都预测。我们可以用同样的方法调用series_to_supervised()。例如:
运行此示例将输出一个新的数据帧,显示两个变量在一个时间步长的输入模式和两个变量在一个时间步长的输出模式。
这取决于问题的具体内容。列可以随机分为x和y部分。例如,如果当前观测值var1也被提供作为输入,那么只有var2将被预测。
通过如上确定输入和输出序列的特定长度,可以容易地完成多变量时间序列的预测。下面是一个转换示例,它将一个时间步长作为输入,将两个时间步长作为预测序列。
运行此示例将显示修改后的大数据帧。
建议:把你自己的数据集作为一个实验,尝试几种不同的框架,看看哪种更好。
从浅入深,邓志东教授的神经网络训练在清华大学进行!
本课程将系统地介绍人工智能中的神经网络,特别是深度学习的发展现状、基本原理和主要方法。包括人工智能调查、生物神经系统、人工神经元模型、bp网络、hopfield网络、深度卷积神经网络(cnn)、长短期记忆网络(lstm)和深度强化学习。重点分析了一些典型的cnn模式,并结合具体的应用案例来分析节目实践。
本课程将介绍最新的科研成果和前沿领域(提供50多篇具有原创性和最新代表性的人工神经网络英文论文,其中包括2016年关于深度学习的最新论文),强调各种理论方法在解决实际问题中的综合应用。雷锋。com推荐!
视频地址:mooc.ai/course/65
相关文章:
教你使用python实现时间序列预测的特征选择
时间序列预测教程:如何使用python来预测波士顿每个月的武装抢劫数量?
雷锋文章版权所有。严禁擅自转载。详情请参考转载说明。
来源:搜狐微门户
标题:如何把时间序列问题转化为监督学习问题?通俗易懂的 Python 教程
地址:http://www.shwmhw.com/shxw/63254.html