Через некоторое время мне удалось правильно понять, какие размеры где. Керас ожидает трехмерный массив .shape
(totalRows, sequence, totalColumns) . sequences
один был самым запутанным для меня.
Это потому, что при изменении формы df df.reshape(len(df), 1, len(df.columns))
значение keras выучило бы матрицу из 1 строки, что дало мне плохие результаты, потому что я не знал , лучше масштабировать данные для меня MinMaxScaler(-1,1)
работал лучше всего , но может быть (0,1)
.
Что заставило меня понять , который должен был сначала использовать последовательность из более чем 1 строки (или дней, поскольку мой набор данных был временным рядом) . Это означает, что вместо подачи 1 строки объектов X приводит к 1 значению y , Я использовал что-то вроде 5 строк объектов X приводит к 1 значению y, как в:
# after scaling the df, resulted in "scaled_dataset"
sequences = 5
result = []
# for loop will walk for each of the 1500 rows
for i in range(0,len(scaled_dataset)):
# every group must have the same length, so if current loop position i + number
# of sequences is higher than df length, breaks
if i+sequences <= len(scaled_dataset):
# this will add into the list as [[R1a,R1b...R1t],[R2a,R2b...R2t],...[R5a,R5b...R5t]]
result.append(scaled_dataset[i:i+sequences].values)
# Converting to array + keras takes float32 better than 64
train_x = np.array(result).astype('float32')
# making the y into same length as X
train_y = np.array(y.tail(train_x.shape[0]).values)
train_x.shape, train_y.shape
'>>> (1495, 5, 2400), (1495,)
Написано по-другому менталитет о формах керас для моей задачи:
Учитывая, что это временной ряд, вышеприведенное означает, что 5 дней (строки 0–4) данных приводят к значению y строки 5.
Тогда, если не считать первый день + следующий день после последнего - все еще 5 дней - (строки 1–5) данных, то получится значение y строки 6.
Тогда, если не считать второй день + следующий день после последнего - все еще 5 дней - (строки 2–6) данных, то получим значение y строки 7.
Это довольно запутанно для начинающих keras / LSTM, но я надеюсь, что смогу рассказать об этом людям, которые могут приземлиться здесь.