Как подготовить LSTM для нескольких временных рядов с несколькими переменными и разными размерами временных рядов? - PullRequest
0 голосов
/ 09 марта 2020

У меня есть набор сообщений о самолетах, в котором есть столбец, который идентифицирует каждый пример самолета:

idaircraft = 1, отметка времени = 340503404, высота = xxxxxx, долгота = xxxxx, широта = xxxxx, Touchdown = 23423554

Смысл в том, чтобы сделать прогноз параметра приземления для новых самолетов. Данные каждого временного ряда различны, например, в idaircraft = 1 у меня 900 сообщений, для самолета 2 у меня 668 сообщений ....

на данный момент я пытаюсь тренировать каждый временной ряд отдельно от остальных в качестве инкрементальной модели, а затем сделайте прогноз на основе всех маршрутов.

Это то, что я сделал:

разделение серии в поезде и тестирование:

367

dftrain=df.loc[df["idaircraft"]<367]
dftest=df.loc[df['idaircraft']>368]
dftrain.head()

и теперь попробуйте сделать данные под наблюдением

from sklearn.preprocessing import MinMaxScaler
# Form dataset matrix
def create_dataset(dataset, previous=1):
    dataX, dataY = [], []
    for i in range(len(dataset)-previous-1):
        a = dataset[i:(i+previous), 0]
        dataX.append(a)
        dataY.append(dataset[i + previous, 0])
    return np.array(dataX), np.array(dataY)

и здесь обучаем модель:

Nmodel = 0

for name, group in dftrain.groupby('idaircraft'):
    seleccionX = group
    scaler = MinMaxScaler(feature_range=(0, 1))
    train = scaler.fit_transform(seleccionX)
    #Select full time series with len-10
    previous = len(group)-10
    X_train, Y_train = create_dataset(train, previous)
    X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.LSTM(50, input_shape=(1, previous)))
    model.add(tf.keras.layers.Dense(1))
    model.compile(loss='mse', optimizer='adam')
    model.fit(X_train, Y_train, epochs=10, batch_size=128, verbose=2)
    modelosRestantes = modelosRestantes +1
    if((Nmodel%5) == 0):
        model.save(path)
        print("Model Saved: ", Nmodel)
    print("Ramaining series: ", Nmodel ,"de 367")

Я не уверен, что я делаю это правильно Может кто-нибудь дать мне совет! Потому что я не понимаю, предсказываю ли я переменную, которая мне нужна, «Touchdown», и правильно ли я тренирую модель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...