#python #pandas #neural-network #pytorch
#python #панды #нейронная сеть #pytorch
Вопрос:
Я следовал руководству по https://stackabuse.com/time-series-prediction-using-lstm-with-pytorch-in-python / для того, чтобы настроить модель LSTM для прогнозирования с использованием torch. После импорта необходимых модулей (torch, torch.nn, functional, optim и т. Д. 🙂 Я настроил свой список индексов с количествами на 52 недели.
idxlist = []
for x in range (0, len(inputslist)):
idxlist.append(a - datetime.timedelta(weeks = x))
in_data = pd.DataFrame(columns=['date','qty'])
in_data.date = idxlist
in_data.qty = inputslist
all_data = in_data['qty'].values.astype(float)
Затем я определил размер теста и настроил масштабатор для нормализации данных:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(-1,1))
train_data_normalized = scaler.fit_transform(train_data.reshape(-1,1))
train_data_normalized = torch.FloatTensor(train_data_normalized).view(-1)
#train window
train_window = 12
Затем я создал последовательности:
def create_inout_sequences(input_data,tw):
inout_seq = []
L = len(input_data) ##40
for i in range(L-tw): ##32 (se tw=8)
train_seq = input_data[i:i tw]
train_label = input_data[i tw:i tw 1]
inout_seq.append((train_seq ,train_label))
return inout_seq
train_inout_seq = create_inout_sequences(train_data_normalized, train_window)
print(len(train_inout_seq)) #len(train) - train_w
И настройте класс Net для модели LSTM. После оптимизации с помощью model=LSTM(), optim .Адам и model.eval(), я получаю обратное преобразование с помощью:
actual_predictions = scaler.inverse_transform(np.array(test_inputs[train_window:] ).reshape(-1, 1))
Однако построение прогнозируемых значений за последние 12 недель с фактическими значениями, которые я получаю:
График.
Почему это предсказание намного ниже фактических значений, даже если оно периодическое?
Комментарии:
1. Сходилось ли обучение? Какова окончательная потеря?
2. Я так думаю .. в итоге потеря составила 0,00149374, рассчитанная с помощью функции MSELoss .
3. Я изменил размер скрытого слоя со 100 на 200, и теперь прогноз выше, чем ожидалось.. Какие-либо причины для этого?
4. Попробуйте обучить его дольше, например, 300 эпох. Может быть разница.