Прогнозирование временных рядов LSTM - начиная с малых потерь, и точность не меняется - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь предсказать сетевой трафик на основе прошлых значений.Я построил сеть LSTM и попробовал несколько параметров, однако всегда получаю одинаковую очень низкую точность (0,108).

scaler = MinMaxScaler(feature_range = (0, 1))
dataset = scaler.fit_transform(dataset)
train_size = int(len(dataset) * 0.67)
test_size = len(dataset) - train_size
train, test = dataset[0:train_size,:], dataset[train_size:len(dataset),:]
print(len(train), len(test))

def create_dataset(dataset, window_size = 1):
    data_X, data_Y = [], []
    for i in range(len(dataset) - window_size - 1):
        a = dataset[i:(i + window_size), 0]
        data_X.append(a)
        data_Y.append(dataset[i + window_size, 0])
    return(np.array(data_X), np.array(data_Y))

window_size = 1
train_X, train_Y = create_dataset(train, window_size)
test_X, test_Y = create_dataset(test, window_size)
print("Original training data shape:")
print(train_X.shape)

# Reshape the input data into appropriate form for Keras.
train_X = np.reshape(train_X, (train_X.shape[0], 1, train_X.shape[1]))
test_X = np.reshape(test_X, (test_X.shape[0], 1, test_X.shape[1]))

model = Sequential()
model.add(LSTM(4, input_shape = (1, window_size)))
model.add(Dense(1))
opt = optimizers.SGD(lr=0.01, momentum=0.9)
model.compile(loss = "mean_squared_error", optimizer = opt, metrics = ['accuracy'])

Как видите, моя потеря начинается с довольно низкого значения, а мояпостоянная точность во времени.Что я делаю не так?

Заранее спасибо.:)

График потерь и точности можно найти здесь: потери точность

Ответы [ 2 ]

0 голосов
/ 22 сентября 2019
  1. Попробуйте случайным образом перемешать данные.
  2. LSTM лучше всего использовать при использовании последовательных данных.Попробуйте заменить LSTM на плотный слой.Или измените ваши входы.Вам необходимо передать последовательность прошлых значений в LSTM, чтобы он мог предсказать следующее значение.Таким образом, (1,1) не является последовательностью, LSTM здесь не используется.Метрическая точность в этом контексте бесполезна, попробуйте указать абсолютную ошибку или что-то в этом роде.
0 голосов
/ 22 сентября 2019

Если (13942, 1, 1) - это весь ваш набор данных, он слишком мал для глубокого изучения;вам лучше использовать «мелкие» методы, например, машины опорных векторов (SVM).В качестве альтернативы рассмотрите мой ответ здесь .

EDIT : я только что заметил, что вы используете метрику accuracy;Точность регрессии не определена - я удивлен, что ошибка не возникла.Если он использует prediction==true для вычисления точности, вам повезло, что ваша точность не равна 0. Исходя из потерь, ваша модель, похоже, на самом деле работает довольно хорошо;перепроверить, построить predictions против true и сравнить.(В общем, mse < .3 это хорошо, а mse < .1 отлично)

...