gpt4 book ai didi

python - 用于多变量时间序列的循环神经网络 - TensorFlow

转载 作者:行者123 更新时间:2023-12-02 04:40:34 24 4
gpt4 key购买 nike

我使用 3 个变量,使用先前的需求来预测 future 的需求,但每当我运行代码时,我的 Y 轴 都会显示错误

如果我在 Y 轴 上仅使用一个变量,则不会出现错误。

示例:

demandaY = bike_data[['cnt']]
n_steps = 20

for time_step in range(1, n_steps+1):
demandaY['cnt'+str(time_step)] = demandaY[['cnt']].shift(-time_step).values

y = demandaY.iloc[:, 1:].values
y = np.reshape(y, (y.shape[0], n_steps, 1))

数据集

enter image description here

脚本

features = ['cnt','temp','hum']
demanda = bike_data[features]
n_steps = 20

for var_col in features:
for time_step in range(1, n_steps+1):
demanda[var_col+str(time_step)] = demanda[[var_col]].shift(-time_step).values

demanda.dropna(inplace=True)
demanda.head()

n_var = len(features)
columns = list(filter(lambda col: not(col.endswith("%d" % n_steps)), demanda.columns))

X = demanda[columns].iloc[:, :(n_steps*n_var)].values
X = np.reshape(X, (X.shape[0], n_steps, n_var))

y = demanda.iloc[:, 0].values
y = np.reshape(y, (y.shape[0], n_steps, 1))

输出

ValueError: cannot reshape array of size 17379 into shape (17379,20,1)

GitHub: repository

最佳答案

不清楚OP是否仍然想要答案,但我将发布我在评论中链接的答案并进行一些修改。

时间序列数据集可以有不同的类型,让我们考虑一个具有 X 的数据集作为功​​能和 Y作为标签。根据问题Y可能是来自X的样本时间上的变化或者也可以是您想要预测的另一个目标变量。

def create_dataset(X,Y, look_back=10, label_lag = -1, stride = 1):

dataX, dataY = [], []

for i in range(0,(len(X)-look_back + 1),stride):
a = X[i:(i+look_back)]
dataX.append(a)
b = Y[i + look_back + label_lag]
dataY.append(b)
return np.array(dataX), np.array(dataY)

print(features.values.shape,labels.shape)
#(619,4), (619,1)

x,y = create_dataset(X=features.values,Y=labels.values,look_back=10,stride=1)
(x.shape,y.shape)
#(610, 10, 4), (610, 1)

其他参数的使用:

  1. label_lag :如果X sample 时间为t , Y sample 将在时间t+label_lag 。默认值将 XY在相同索引 t

X第一个样本的索引和Y :

if label_lag is -1:
np.where(x[1,-1]==features.values)[0],np.where(y[1] == labels.values)[0]
#(10,10,10,10), (10)

if label_lag is 0:
np.where(x[1,-1]==features.values)[0],np.where(y[1] == labels.values)[0]
#(10,10,10,10), (11)
  • look_back :这是当前时间步长的数据集过去历史的样本数量 t 。 Look_back 为 10 意味着将有来自 t-10 to t 的样本在一个样本中。

  • stride :两个连续样本之间的指数差距。当stride=2 ,如果 X 的第一个样本包含索引 0 to 10 中的行那么第二个样本将包含索引 2 to 12 中的行。

  • 此外,您还可以在 Y 中进行回顾取决于您当前的问题和 Y也可以是多维的。在那种情况下,改变就只有这个 b=Y[i:(i+look_back+label_lag)]

    通过 TimeseriesGenerator 可以实现相同的功能来自keras

    TimeseriesGenerator(features.values,labels.values,length=10,batch_size=64,stride=1)

    哪里lengthlook_back 相同。默认情况下features中有一个间隙和labels除 1,即 X 中的样本将会来自 t-10 to t以及Y中的相应样本将位于索引 t+1 。如果您希望两者具有相同的索引,只需 shift在传入生成器之前将标签加一。

    关于python - 用于多变量时间序列的循环神经网络 - TensorFlow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58721591/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com