前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何用Python将时间序列转换为监督学习问题

如何用Python将时间序列转换为监督学习问题

作者头像
ArrayZoneYour
发布于 2018-02-13 08:00:16
发布于 2018-02-13 08:00:16
25.1K0
举报

深度学习这样的机器学习方法可以用于时间序列预测。

在机器学习方法出现之前,时间序列预测问题必须重构为监督学习问题来处理,将时间序列转化为输入和输出的时间序列对。

在本教程中,你将了解到如何将单变量和多变量时间序列预测问题转换为机器学习算法处理的监督学习问题。

完成本教程后,您将知道:

  • 如何编写一个函数来将时间序列数据集转换为监督学习数据集。
  • 如何变换单变量时间序列数据进行机器学习。
  • 如何变换多变量时间序列数据进行机器学习。

让我们开始吧。

照片来源:Quim Gil. https://www.flickr.com/photos/quimgil/8490510169/, 保留部分权利
照片来源:Quim Gil. https://www.flickr.com/photos/quimgil/8490510169/, 保留部分权利

时间序列 vs 监督学习

在开始之前,让我们花点时间来更好地理解时间序列和监督学习数据的形式。

时间序列是按照时间索引排列的一串数字,可以理解为有序值构成的一列数据或有序列表。

例如:

代码语言:txt
AI代码解释
复制
0
1
2
3
4
5
6
7
8
9

监督学习问题由输入模式(X)和输出模式(y)组成,这使得算法可以学习如何根据输入模式来预测输出模式。

例如:

代码语言:txt
AI代码解释
复制
X,	y
1,	2
2,	3
3,	4
4,	5
5,	6
6,	7
7,	8
8,	9

有关此主题的更多信息,可以参考作者的另一篇博客:

Pandas的shift()函数

将时间序列数据转化为监督学习问题所需的关键函数是Pandas的shift()函数。

对于一个给定的DataFrame,可以使用 shift() 函数前移(前面的缺失值用NaN补全)或后移(后面的缺失值用NaN补全)来采集定长切片保存至列中。

在对监督学习的时间序列数据集进行处理时,创建滞后观察列和预测列是必需的。

我们来看一下shift函数应用的实例。

我们可以假定时间序列数据集为10个数字的序列,此时得到的单列Dtaframe如下:

代码语言:txt
AI代码解释
复制
from pandas import DataFrame
df = DataFrame()
df['t'] = [x for x in range(10)]
print(df)

运行代码,可以看到和行索引一同打印出来的时间序列数据,每行对应着一个观测值。

代码语言:txt
AI代码解释
复制
   t
0  0
1  1
2  2
3  3
4  4
5  5
6  6
7  7
8  8
9  9

通过在观测值的列数据中插入新的一列,我们可以将上面展示的观测值位置下移一格,由于新加的一行并没有数据,我们可以用NaN来表示。

shift函数可以帮我们完成这一动作,我们将移位后的列插入到原始列的右侧。

代码语言:txt
AI代码解释
复制
from pandas import DataFrame
df = DataFrame()
df['t'] = [x for x in range(10)]
df['t-1'] = df['t'].shift(1)
print(df)

运行代码,我们在原有数据集的基础上得到了两列数据,第一列为原始的观测值,第二列为下移后得到的新列。

可以看到,通过前移序列,我们得到了一个原始的监督学习问题( Xy 的左右顺序是反的)。忽略行标签,第一列的数据由于存在NaN值应当被丢弃。从第二行来看,输入数据0.0位于第二列(X),输出数据1位于第一列(y)。

代码语言:txt
AI代码解释
复制
   t  t-1
0  0  NaN
1  1  0.0
2  2  1.0
3  3  2.0
4  4  3.0
5  5  4.0
6  6  5.0
7  7  6.0
8  8  7.0
9  9  8.0

我们可以将前移量更改为2,3或更多之后再重复这个过程,我们可以得到更长的输入时间序列(X),基于输入时间序列,我们可以预测输出值(y)。

shift操作也可以接受负整数作为输入,这样的效果是在末尾插入新行来提取新的观测结果。代码示例如下:

代码语言:txt
AI代码解释
复制
from pandas import DataFrame
df = DataFrame()
df['t'] = [x for x in range(10)]
df['t+1'] = df['t'].shift(-1)
print(df)

运行代码,可以看到最后一行是用NaN填充的。

可以看到,原本的预测列变为了输入(X),第二列为输出值(y)。再第一行即可以用输入值0预测输出值1.0。

代码语言:txt
AI代码解释
复制
   t  t+1
0  0  1.0
1  1  2.0
2  2  3.0
3  3  4.0
4  4  5.0
5  5  6.0
6  6  7.0
7  7  8.0
8  8  9.0
9  9  NaN

在时间序列预测术语中,当前时间(t)和未来时间(t + 1t + n)是预测时间,过去的观测值(t-1t-n)用于预测。

从这一节我们可以看到我们可以通过设定shift函数左移或右移来从原始时间序列上创建用于监督学习的输入和输出模式组成的序列。

这种方法不仅可以用于传统的 X => y 预测,也可以实现 X => Y,即输入和输出都可以是序列。

此外,移位函数也适用于所谓的多变量时间序列问题。在这种问题中,我们在一个时间序列中不是仅有一组观测值而是有多组观测值(如温度和大气压)。此时时间序列中的变量需要整体前移或者后移来创建多元的输入序列和输出序列。我们稍后将讨论这个问题。

series_to_supervised()函数

我们可以利用Pandas中的 shift() 函数实现在给定输入和输出序列长度的情况下自动重组时间序列问题的数据集。

这是一个很有用的工具,因为它允许我们在用机器学习算法解决时间序列问题时可以尝试不同的输入输出序列组合,以便观察哪一个可能得到更优的模型。

在本节中,我们将用Python实现 series_to_supervised() 函数来接受单变量/多变量时间序列输入并转化为监督学习所需的数据集。

这个函数共有4个参数:

  • data:观测值序列,类型为列表或者二维的Numpy数组,必选参数。
  • n_in:作为输入的滞后观测值数量(X)。值介于1..len(data)之间,可选参数,默认为1。
  • n_out:作为输出的观测值数量(y)。值介于0..len(data)-1之间,可选参数,默认为1。
  • dropnan:是否删除具有NaN值的行,类型为布尔值。可选参数,默认为True。

该函数返回一个值:

  • return:为监督学习重组得到的Pandas DataFrame序列。

新的数据集将被构造为DataFrame,每一列根据变量的编号以及该列左移或右移的步长来命名。这允许你从给定的单变量或多变量序列上设定不同的时移步长来尝试解决当前的时间序列问题。

DataFrame返回之后,你就可以根据需要将其分割为 Xy 两部分以供监督学习使用。

上面的函数定义了每列的默认名,所以你可以在返回数据上直接调用,t-1 命名的列(X)可以作为输入,t 命名的列可以作为输出(y)。

该函数同时兼容Python 2和Python 3。

下面给出函数的完整代码以及注释。

代码语言:txt
AI代码解释
复制
from pandas import DataFrame
from pandas import concat

def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
	"""
	将时间序列重构为监督学习数据集.
	参数:
		data: 观测值序列,类型为列表或Numpy数组。
		n_in: 输入的滞后观测值(X)长度。
		n_out: 输出观测值(y)的长度。
		dropnan: 是否丢弃含有NaN值的行,类型为布尔值。
	返回值:
		经过重组后的Pandas DataFrame序列.
	"""
	n_vars = 1 if type(data) is list else data.shape[1]
	df = DataFrame(data)
	cols, names = list(), list()
	# 输入序列 (t-n, ... t-1)
	for i in range(n_in, 0, -1):
		cols.append(df.shift(i))
		names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
	# 预测序列 (t, t+1, ... t+n)
	for i in range(0, n_out):
		cols.append(df.shift(-i))
		if i == 0:
			names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
		else:
			names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
	# 将列名和数据拼接在一起
	agg = concat(cols, axis=1)
	agg.columns = names
	# 丢弃含有NaN值的行
	if dropnan:
		agg.dropna(inplace=True)
	return agg

如果你有更好的实现方法,欢迎在评论中分享。

现在我们完成了需要的函数,下面我们来探索如何使用它。

单步单变量预测

在时间序列预测中的标准做法是使用滞后的观测值(如t-1)作为输入变量来预测当前的时间的观测值(t)。

这被称为单步预测。

下面的例子演示了如何用滞后观测值(t-1)来预测当前时间的观测值(t)。

代码语言:txt
AI代码解释
复制
from pandas import DataFrame
from pandas import concat

def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
	"""
	将时间序列重构为监督学习数据集.
	参数:
		data: 观测值序列,类型为列表或Numpy数组。
		n_in: 输入的滞后观测值(X)长度。
		n_out: 输出观测值(y)的长度。
		dropnan: 是否丢弃含有NaN值的行,类型为布尔值。
	返回值:
		经过重组后的Pandas DataFrame序列.
	"""
	n_vars = 1 if type(data) is list else data.shape[1]
	df = DataFrame(data)
	cols, names = list(), list()
	# 输入序列 (t-n, ... t-1)
	for i in range(n_in, 0, -1):
		cols.append(df.shift(i))
		names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
	# 预测序列 (t, t+1, ... t+n)
	for i in range(0, n_out):
		cols.append(df.shift(-i))
		if i == 0:
			names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
		else:
			names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
	# 将列名和数据拼接在一起
	agg = concat(cols, axis=1)
	agg.columns = names
	# 丢弃含有NaN值的行
	if dropnan:
		agg.dropna(inplace=True)
	return agg

values = [x for x in range(10)]
data = series_to_supervised(values)
print(data)

运行该示例将打印输出重建的时间序列。

代码语言:txt
AI代码解释
复制
   var1(t-1)  var1(t)
1        0.0        1
2        1.0        2
3        2.0        3
4        3.0        4
5        4.0        5
6        5.0        6
7        6.0        7
8        7.0        8
9        8.0        9

可以看到,观测值被命名为“var1”,输入值的后缀为(t-1),输出值的后缀为(t)。

除此之外,具有NaN值的行已经从DataFrame中自动删除。

我们可以指定任意长度的输入序列(如3)来重复这个例子。只需要修改输入序列的长度参数既可; 例:

代码语言:txt
AI代码解释
复制
data = series_to_supervised(values, 3)

完整的代码样例如下所示。

代码语言:txt
AI代码解释
复制
from pandas import DataFrame
from pandas import concat

def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
	"""
	将时间序列重构为监督学习数据集.
	参数:
		data: 观测值序列,类型为列表或Numpy数组。
		n_in: 输入的滞后观测值(X)长度。
		n_out: 输出观测值(y)的长度。
		dropnan: 是否丢弃含有NaN值的行,类型为布尔值。
	返回值:
		经过重组后的Pandas DataFrame序列.
	"""
	n_vars = 1 if type(data) is list else data.shape[1]
	df = DataFrame(data)
	cols, names = list(), list()
	# 输入序列 (t-n, ... t-1)
	for i in range(n_in, 0, -1):
		cols.append(df.shift(i))
		names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
	# 预测序列 (t, t+1, ... t+n)
	for i in range(0, n_out):
		cols.append(df.shift(-i))
		if i == 0:
			names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
		else:
			names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
	# 将列名和数据拼接在一起
	agg = concat(cols, axis=1)
	agg.columns = names
	# 丢弃含有NaN值的行
	if dropnan:
		agg.dropna(inplace=True)
	return agg

values = [x for x in range(10)]
data = series_to_supervised(values, 3)
print(data)

再次运行代码,可以从打印信息中看到重构后的序列,输入序列从左到有依次排列,最后一列为输出变量。

代码语言:txt
AI代码解释
复制
   var1(t-3)  var1(t-2)  var1(t-1)  var1(t)
3        0.0        1.0        2.0        3
4        1.0        2.0        3.0        4
5        2.0        3.0        4.0        5
6        3.0        4.0        5.0        6
7        4.0        5.0        6.0        7
8        5.0        6.0        7.0        8
9        6.0        7.0        8.0        9

多步预测(序列预测)

另一种预测问题类型是使用过去的观测序列来预测未来的观测序列。

这就是多步预测或序列预测。

我们可以指定另一个参数来重构序列预测问题中的时间序列。举例来说,如果我们的预测问题需要用过去的两个观测值输入来预测两个未来的观测值,我们可以通过下面的调用形式来重构数据:

代码语言:txt
AI代码解释
复制
data = series_to_supervised(values, 2, 2)

完整的代码如下:

代码语言:txt
AI代码解释
复制
from pandas import DataFrame
from pandas import concat

def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
	"""
	将时间序列重构为监督学习数据集.
	参数:
		data: 观测值序列,类型为列表或Numpy数组。
		n_in: 输入的滞后观测值(X)长度。
		n_out: 输出观测值(y)的长度。
		dropnan: 是否丢弃含有NaN值的行,类型为布尔值。
	返回值:
		经过重组后的Pandas DataFrame序列.
	"""
	n_vars = 1 if type(data) is list else data.shape[1]
	df = DataFrame(data)
	cols, names = list(), list()
	# 输入序列 (t-n, ... t-1)
	for i in range(n_in, 0, -1):
		cols.append(df.shift(i))
		names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
	# 预测序列 (t, t+1, ... t+n)
	for i in range(0, n_out):
		cols.append(df.shift(-i))
		if i == 0:
			names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
		else:
			names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
	# 将列名和数据拼接在一起
	agg = concat(cols, axis=1)
	agg.columns = names
	# 丢弃含有NaN值的行
	if dropnan:
		agg.dropna(inplace=True)
	return agg

values = [x for x in range(10)]
data = series_to_supervised(values, 2, 2)
print(data)

运行代码,我们可以看到设定不同的输入变量(t-n)和输出变量(t+n)情况下重构数据的区别。

代码语言:txt
AI代码解释
复制
   var1(t-2)  var1(t-1)  var1(t)  var1(t+1)
2        0.0        1.0        2        3.0
3        1.0        2.0        3        4.0
4        2.0        3.0        4        5.0
5        3.0        4.0        5        6.0
6        4.0        5.0        6        7.0
7        5.0        6.0        7        8.0
8        6.0        7.0        8        9.0

多变量预测

另一个重要的时间序列称为多元时间序列。

这意味着我们通过不同的测量手段得到了多种观测值,并且希望预测其中的一个或几个值。

例如,我们可能有两组时间序列观测值obs1,obs2,我们希望预测其中的一个或两个。

我们可以以完全相同的方式调用 series_to_supervised()

例如:

代码语言:txt
AI代码解释
复制
from pandas import DataFrame
from pandas import concat

def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
	"""
	将时间序列重构为监督学习数据集.
	参数:
		data: 观测值序列,类型为列表或Numpy数组。
		n_in: 输入的滞后观测值(X)长度。
		n_out: 输出观测值(y)的长度。
		dropnan: 是否丢弃含有NaN值的行,类型为布尔值。
	返回值:
		经过重组后的Pandas DataFrame序列.
	"""
	n_vars = 1 if type(data) is list else data.shape[1]
	df = DataFrame(data)
	cols, names = list(), list()
	# 输入序列 (t-n, ... t-1)
	for i in range(n_in, 0, -1):
		cols.append(df.shift(i))
		names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
	# 预测序列 (t, t+1, ... t+n)
	for i in range(0, n_out):
		cols.append(df.shift(-i))
		if i == 0:
			names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
		else:
			names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
	# 将列名和数据拼接在一起
	agg = concat(cols, axis=1)
	agg.columns = names
	# 丢弃含有NaN值的行
	if dropnan:
		agg.dropna(inplace=True)
	return agg

raw = DataFrame()
raw['ob1'] = [x for x in range(10)]
raw['ob2'] = [x for x in range(50, 60)]
values = raw.values
data = series_to_supervised(values)
print(data)

运行代码,控制台将打印重构后的数据,包含两个变量的单步输入观测值和单步输出观测值。

同样,根据问题的实际情况可以将这些列任意拆分为 XY 部分,比方说 var1var2 均为观测值但是只有 var2 需要被预测。

代码语言:txt
AI代码解释
复制
   var1(t-1)  var2(t-1)  var1(t)  var2(t)
1        0.0       50.0        1       51
2        1.0       51.0        2       52
3        2.0       52.0        3       53
4        3.0       53.0        4       54
5        4.0       54.0        5       55
6        5.0       55.0        6       56
7        6.0       56.0        7       57
8        7.0       57.0        8       58
9        8.0       58.0        9       59

可以看到,我们只需要指定输入输出序列的长度就可以轻松地在多变量时间序列上进行序列预测。

例如,下面是单步输入,两步输出的序列预测问题实例:

代码语言:txt
AI代码解释
复制
from pandas import DataFrame
from pandas import concat

def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):
	"""
	将时间序列重构为监督学习数据集.
	参数:
		data: 观测值序列,类型为列表或Numpy数组。
		n_in: 输入的滞后观测值(X)长度。
		n_out: 输出观测值(y)的长度。
		dropnan: 是否丢弃含有NaN值的行,类型为布尔值。
	返回值:
		经过重组后的Pandas DataFrame序列.
	"""
	n_vars = 1 if type(data) is list else data.shape[1]
	df = DataFrame(data)
	cols, names = list(), list()
	# 输入序列 (t-n, ... t-1)
	for i in range(n_in, 0, -1):
		cols.append(df.shift(i))
		names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]
	# 预测序列 (t, t+1, ... t+n)
	for i in range(0, n_out):
		cols.append(df.shift(-i))
		if i == 0:
			names += [('var%d(t)' % (j+1)) for j in range(n_vars)]
		else:
			names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]
	# 将列名和数据拼接在一起
	agg = concat(cols, axis=1)
	agg.columns = names
	# 丢弃含有NaN值的行
	if dropnan:
		agg.dropna(inplace=True)
	return agg

raw = DataFrame()
raw['ob1'] = [x for x in range(10)]
raw['ob2'] = [x for x in range(50, 60)]
values = raw.values
data = series_to_supervised(values, 1, 2)
print(data)

运行实例,可以看到重构得到的DataFrame。

代码语言:txt
AI代码解释
复制
   var1(t-1)  var2(t-1)  var1(t)  var2(t)  var1(t+1)  var2(t+1)
1        0.0       50.0        1       51        2.0       52.0
2        1.0       51.0        2       52        3.0       53.0
3        2.0       52.0        3       53        4.0       54.0
4        3.0       53.0        4       54        5.0       55.0
5        4.0       54.0        5       55        6.0       56.0
6        5.0       55.0        6       56        7.0       57.0
7        6.0       56.0        7       57        8.0       58.0
8        7.0       57.0        8       58        9.0       59.0

在你的实际问题中,你可以在数据集上尝试不同的构造方式来达到最优的效果。

总结

在本教程中,我们探究了如何用Python将时间序列数据集重新组织来供监督学习使用。

具体来说,你了解到:

  • Pandas的 shift() 函数及其如何用它自动从时间序列数据中产生监督学习数据集。
  • 如何将单变量时间序列重构为单步和多步监督学习问题。
  • 如何将多变量时间序列重构为单步和多步监督学习问题。
评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
用Python将时间序列转换为监督学习问题
但在使用机器学习之前,时间序列问题需要被转化为监督学习问题。从仅仅是一个序列,变成成对的输入、输出序列。
数据STUDIO
2022/04/11
4K0
时间序列基于监督学习的LSTM模型为什么可以预测股票走势(附完整代码)
疫情期间,在家学习Python,调通了基于监督学习的LSTM神经网络预测模型代码,在一般代码的基础上,做了单步和多步通用版的改进。调通的代码附后,供各位大咖指正。
用户7017302
2020/03/01
3.9K0
LTSM 实现多元素时序数据植物健康预测
近些年来,“预测”一词在各个领域被频繁提及,所谓预测,实际上就是根据历史规律,推测未来结果。在科学技术发展有限的过去,预测主要是利用经验去推测未来,随着社会的发展,对预测的客观性和准确性提出了更高的要求,简单的经验推理已无法满足社会的需求。近几十年来,随着人工智能技术的发展,出现了新型的预测方法,人工神经网络预测技术正是其中佼佼者。人工神经网络预测技术一经面世就展现了它相比传统预测方法的优势:精度高、速度快,随着人工神经网络预测技术研究的深入,逐渐发展出性能更优的复杂网络,如 BP、CP 和 ART 网络等。
AI科技大本营
2021/12/17
8070
LTSM 实现多元素时序数据植物健康预测
基于长短期记忆神经网络LSTM的多步长时间序列预测
长短时记忆网络(LSTM)是一种能够学习和预测长序列的递归神经网络。LSTMs除了学习长序列外,还可以学习一次多步预测,这对于时间序列的预测非常有用。LSTMs的一个困难在于,它们可能难以配置,而且需要大量的准备工作才能获得适合学习的格式的数据。
代码医生工作室
2020/06/16
6.9K0
基于长短期记忆神经网络LSTM的多步长时间序列预测
独家 | 如何用XGBoost做时间序列预测?
本文介绍了如何用XGBoost做时间序列预测,包括将时间序列转化为有监督学习的预测问题,使用前向验证来做模型评估,并给出了可操作的代码示例。
数据派THU
2020/09/04
4.5K0
基于深度学习模型的空气污染时序预测
Blog: http://yishuihancheng.blog.csdn.net
郭好奇同学
2022/06/07
2.2K0
基于深度学习模型的空气污染时序预测
机器学习实战之风功率预测
目前机器学习与气象数据的结合已经在实际生产中有了应用,比如风电场风功率预测、光伏功率预测和负荷预测。本文以风功率预测作为一个小栗子: 风功率预测是指以风电场的历史功率、历史风速、地形地貌、数值天气预报、风电机组运行状态等数据建立风电场输出功率的预测模型,以风速、功率或数值天气预报数据作为模型的输入,结合风电场机组的运行状态及运行工况,得到风电场未来的输出功率,预测时间尺度包括短期预测和超短期预测,目的是上报国家电网,利于国家电网调度。目前主流方案是结合数值天气预报和机器学习算法(LSTM、SVM等)对风功率进行时序预测,包含超短期预报(未来4个小时共16个时刻)和短期预报(未来三天共288个时刻)。 本文主要利用WRF的气象要素预报数据和LSTM算法进行风功率预测。
MeteoAI
2019/07/22
6.3K8
Keras中带LSTM的多变量时间序列预测
像长短期记忆(Long Short-Term Memory ) LSTM 递归神经网络这样的神经网络几乎可以完美地模拟多个输入变量的问题。
QiqiHe
2018/02/09
46.6K8
Keras中带LSTM的多变量时间序列预测
开发 | 如何把时间序列问题转化为监督学习问题?通俗易懂的 Python 教程
AI科技评论按:本文作者 Jason Brownlee 为澳大利亚知名机器学习专家,对时间序列预测尤有心得。原文发布于其博客。 Jason Brownlee 机器学习方法,比如深度学习,是可以用来解决时间序列预测问题的。 但在使用机器学习之前,时间序列问题需要被转化为监督学习问题。从仅仅是一个序列,变成成对的输入、输出序列。 这篇教程里,你将学到如何把单变量、多变量时间序列问题转为机器学习算法能解决的监督学习问题。本教程包含: 如何创建把时间序列数据集转为监督学习数据集的函数; 如何让单变量时间序
AI科技评论
2018/03/12
1.7K0
开发 | 如何把时间序列问题转化为监督学习问题?通俗易懂的 Python 教程
第14节:lstm原理及numpy
文章目录 lstm原理 rnn lstm实例 lstm原理 文本相关。主要应用于自然语言处理(NLP)、对话系统、情感分析、机器翻译等等领域,Google翻译用的就是一个7-8层的LSTM模型。 时序相关:就是时间序列的预测,诸如预测天气/温度/. 为何全连接层和卷积神经网络无法处理序列问题,因为缺乏记忆模块,无法记忆之前输入的内容. rnn - 简单的rnn。输入是2维的(timesteps, input_features). 这里的loop就是在timesteps上的loop:每一个时刻t,RNN
AI拉呱
2022/04/13
4320
第14节:lstm原理及numpy
Forecast at energy(Smart meters in London)
数据源: https://www.kaggle.com/jeanmidev/smart-meters-in-london
李玺
2021/11/22
5780
Forecast at energy(Smart meters in London)
时间序列预测-女性出生数量预测
然后通过滑窗来构造多个X,如下图所示,第一列为是将原始值往后移6个时间步,其他列依次类推。
致Great
2023/08/25
3020
时间序列预测-女性出生数量预测
Keras中的多变量时间序列预测-LSTMs
神经网络诸如长短期记忆(LSTM)递归神经网络,几乎可以无缝地对多变量输入问题进行建模。
派大星的数据屋
2022/04/02
3.3K0
Keras中的多变量时间序列预测-LSTMs
多元时间序列特征工程的指南
使用Python根据汇总统计信息添加新特性,本文将告诉你如何计算几个时间序列中的滚动统计信息。将这些信息添加到解释变量中通常会获得更好的预测性能。
deephub
2023/02/01
9650
时间序列的重采样和pandas的resample方法介绍
重采样是时间序列分析中处理时序数据的一项基本技术。它是关于将时间序列数据从一个频率转换到另一个频率,它可以更改数据的时间间隔,通过上采样增加粒度,或通过下采样减少粒度。在本文中,我们将深入研究Pandas中重新采样的关键问题。
deephub
2023/09/21
1.6K0
时间序列的重采样和pandas的resample方法介绍
基于树模型的时间序列预测实战
现在,我们将了解一个与经典ARIMA时间序列建模不同的新领域。在监督学习模型中,仅仅使用单变量时间序列似乎信息有限,预测也比较困难。因此,为了生成足够的特征,我们需要采取一些方法,例如创建大量的滞后变量。此外,关于预测目标值,我们需要用过去的项来预测未来的项,而且需要决定是一步领先还是多步领先。
数据STUDIO
2024/04/18
4910
基于树模型的时间序列预测实战
Pandas 2.2 中文官方教程和指南(二十五·二)
将一个以小时为列、天为行的矩阵转换为连续的行序列,形成时间序列。如何重新排列 Python pandas DataFrame?
ApacheCN_飞龙
2024/05/24
2860
Pandas 2.2 中文官方教程和指南(二十五·二)
手把手教你用 Python 实现针对时间序列预测的特征选择
AI 研习社按:本文源自美国机器学习专家 Jason Brownlee 的博客,AI 研习社编译。 要将机器学习算法应用于时间序列数据,需要特征工程的帮助。 例如,单变量的时间序列数据集由一系列观察结果组成,它们必须被转换成输入和输出特征,才能用于监督性学习算法。 但这里有一个问题:针对每个时间序列问题,你可以处理的特征类型和数量,却并没有明确的限制。当然,古典的时间序列分析工具(如相关图correlogram)可以帮助评估滞后变量(lag variables),但并不能直接帮助开发者对其他类型的特征进
AI研习社
2018/03/29
3.4K0
手把手教你用 Python 实现针对时间序列预测的特征选择
机器学习入门——使用python进行监督学习
什么是监督学习? 在监督学习中,我们首先要导入包含训练特征和目标特征的数据集。监督式学习算法会学习训练样本与其相关的目标变量之间的关系,并应用学到的关系对全新输入(无目标特征)进行分类。 为了说明如何
AiTechYun
2018/03/02
1.5K0
机器学习入门——使用python进行监督学习
时间序列预测如何变成有监督学习问题?
时间序列预测问题可以作为一个有监督学习问题来解决。
风飘叶扬
2018/02/08
5.4K0
时间序列预测如何变成有监督学习问题?
相关推荐
用Python将时间序列转换为监督学习问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档