为时间序列预测机器学习 (Numpy) 重塑数据的有效方法
Efficient way to Reshape Data for Time Series Prediction Machine Learning (Numpy)
假设我有一个数据集(numpy 数组)X 个时间序列的 N 个样本,每个样本具有 D 维向量的 T 个时间步长,因此:
X.shape == (N,T,D)
现在我想将其重塑为 x(数据集)和 y(标签)以应用机器学习来预测时间序列中的步骤。
我想获取每个长度为 n 的样本的每个子系列
x.shape==(N*(T-n),n,D) and y.shape==(N*(T-n)),D)
和
X[k,j:j+n,:]
成为我在 x
和
中的样本之一
X[k,j+n+1,:]
它是 y
中的标签。
for 循环是唯一的方法吗?
所以我有下面的方法,但是它有一个for循环,我不确定我不能做得更好:
def reshape_data(self, X, n):
"""
Reshape a data set of N time series samples of T time steps each
Args:
data: Time series data of shape (N,T,D)
n: int, length of time window used to predict x[t+1]
Returns:
"""
N,T,D = X.shape
x = np.zeros((N*(T-n),n,D))
y = np.zeros((N*(T-n),D))
for i in range(T-n):
x[N*i:N*(i+1),:,:] = X[:,i:i+n,:]
y[N*i:N*(i+1),:] = X[:,i+n,:]
return x,y
您正在寻找 pandas data panel
。 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Panel.html). just put into the numpy array, transpose on the minor axis and get its numpy representation (.as_matrix()
or simply .values
). if you want to truly do it only in numpy alone, numpy.transpose
just for (https://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html)
假设我有一个数据集(numpy 数组)X 个时间序列的 N 个样本,每个样本具有 D 维向量的 T 个时间步长,因此:
X.shape == (N,T,D)
现在我想将其重塑为 x(数据集)和 y(标签)以应用机器学习来预测时间序列中的步骤。
我想获取每个长度为 n 的样本的每个子系列
x.shape==(N*(T-n),n,D) and y.shape==(N*(T-n)),D)
和
X[k,j:j+n,:]
成为我在 x
和
X[k,j+n+1,:]
它是 y
中的标签。
for 循环是唯一的方法吗?
所以我有下面的方法,但是它有一个for循环,我不确定我不能做得更好:
def reshape_data(self, X, n):
"""
Reshape a data set of N time series samples of T time steps each
Args:
data: Time series data of shape (N,T,D)
n: int, length of time window used to predict x[t+1]
Returns:
"""
N,T,D = X.shape
x = np.zeros((N*(T-n),n,D))
y = np.zeros((N*(T-n),D))
for i in range(T-n):
x[N*i:N*(i+1),:,:] = X[:,i:i+n,:]
y[N*i:N*(i+1),:] = X[:,i+n,:]
return x,y
您正在寻找 pandas data panel
。 (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Panel.html). just put into the numpy array, transpose on the minor axis and get its numpy representation (.as_matrix()
or simply .values
). if you want to truly do it only in numpy alone, numpy.transpose
just for (https://docs.scipy.org/doc/numpy/reference/generated/numpy.transpose.html)