Как улучшить производительность модели LSTM для прогнозирования погоды?

Вопрос или проблема

Я предсказываю осадки, используя observational данные. Всего имеется 87,070 образцов данных, но только 1,885 образцов имеют осадки.

Вот LSTM модель, которую я использую:

class LstmModel(Model):
def __init__(self, Lstm_units) -> None:
    super(LstmModel, self).__init__()
    self.lstm_1 = LSTM(units=Lstm_units, return_sequences=True)
    self.lstm_2 = LSTM(units=Lstm_units, return_sequences=True)
    self.lstm_3 = LSTM(units=Lstm_units)


    self.den_1 = Dense(units=64, activation="relu")
    self.den_2 = Dense(units=16, activation="relu")
    self.den_3 = Dense(units=1)

def call(self, Input_md, training=False):

    x = self.lstm_1(Input_md)
    x = self.lstm_2(x)
    x = self.lstm_3(x)

    out_lstm = self.den_1(x)
    out_lstm = self.den_2(out_lstm)
    output = self.den_3(out_lstm)

    return output

Результат потерь после обучения:

LSTM Training loss

Результат тестирования:

LSTM test result

Я думал, что проблема в том, что образцы с наблюдаемыми осадками слишком редки по сравнению с общим количеством образцов. Поэтому я увеличил количество образцов осадков, дублируя их, пока они не составили 40% от общего количества.

Вот результат, который я обучил:

LSTM Training loss

Результат тестирования:

LSTM test result

Судя по всему, модель была оптимизирована и лучше усвоила дождевые образцы. Однако это привело к переобучению. Я был бы очень признателен за любые советы от всех по поводу моего проекта. Большое спасибо!

Ответ или решение

Для улучшения производительности модели LSTM для предсказания погоды, вам следует рассмотреть несколько ключевых аспектов, которые могут помочь преодолеть проблему несбалансированности данных и уменьшить эффект переобучения.

1. Улучшение структуры модели

Несмотря на то, что ваша модель LSTM имеет несколько слоев, можно рассмотреть:

  • Добавление регуляризации: Используйте механизмы регуляризации, такие как Dropout или L2-регуляризация, чтобы предотвратить переобучение. Например, добавление слоя Dropout после каждого слоя LSTM может помочь уменьшить переобучение:
from keras.layers import Dropout

self.lstm_1 = LSTM(units=Lstm_units, return_sequences=True)
self.dropout_1 = Dropout(0.2)  # 20% dropout
...
x = self.dropout_1(self.lstm_1(Input_md))
  • Настройка гиперпараметров: Экспериментируйте с количеством нейронов в каждом слое, чтобы найти оптимальные значения. Также вы можете протестировать разное количество LSTM-слоев.

2. Обработка данных

  • Сбалансированность классов: Вместо простой дубликации положительных классов (дождь), рассмотрите использование методов генерации синтетических данных, таких как SMOTE (Synthetic Minority Over-sampling Technique), чтобы создать новые образцы дождя, основанные на существующих.

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

3. Методология обучения

  • Использование ранней остановки: Включите механизм ранней остановки для предотвращения переобучения. Это позволит вам завершить обучение, когда модель начинает ухудшаться на валидационной выборке, сохраняя наилучшие веса.
from keras.callbacks import EarlyStopping

early_stopping = EarlyStopping(monitor='val_loss', patience=5)
model.fit(X_train, y_train, validation_data=(X_val, y_val), callbacks=[early_stopping])
  • Кросс-валидация: Используйте кросс-валидацию для проверки стабильности модели и улучшения оценок гиперпараметров.

4. Использование более сложных архитектур

  • Гибридные модели: Рассмотрите возможность использования гибридных моделей, которые могут включать LSTM в сочетании с другими архитектурами, такими как CNN (свёрточные нейронные сети) для извлечения пространственных признаков из данных.

  • Attention Mechanisms: Включение механизмов внимания может помочь модели сосредоточиться на более важных временных точках, тем самым повышая предсказательную способность.

5. Постобработка результатов

  • Пороговое значение: Для модели, предназначенной для предсказания дождя, попробуйте использовать различные пороги для разделения вероятностей. Возможно, вам нужно будет настроить порог, чтобы минимизировать ложные срабатывания и пропуски.

  • Ансамблевое моделирование: Попробуйте объединить предсказания нескольких моделей для улучшения общей производительности. Это можно сделать, например, используя методы голосования или усреднения.

Заключение

Работа с временными рядами, особенно в условиях несбалансированных классов, требует тщательной настройки и обдуманной обработки данных. Применяя вышеуказанные рекомендации, вы сможете улучшить производительность вашей модели LSTM для предсказания дождя. Каждый из представленных методов имеет свои преимущества и требования, поэтому наилучшие результаты вы сможете достигнуть, проводя эксперименты и тщательно анализируя их.

Оцените материал
Добавить комментарий

Капча загружается...