Многомерная временная серия с переменным размером входных данных: классификация

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

У меня есть многомерные временные ряды. Каждый образец имеет признаки от f0 до f100, с 24 временными шагами. Что-то вроде этого:
Данные с переменным размером

По оси x находятся 24 временных шага, а по оси y – 100 признаков. Задача состоит в том, что у каждого образца есть неопределенное количество признаков внизу, которые все равны nan.

Это задача классификации, где образцы в данном классе могут иметь переменные размеры, как это. Они в одном классе, потому что, когда их изображают в виде тепловой карты, более крупные образцы выглядят похоже на меньшие. Что-то вроде этого:
Похожие паттерны в классе с переменным размером

Пожалуйста, укажите мне направление к подходу глубокого обучения с использованием RNN или LSTM, который может справиться с этой проблемой. Возможно, есть разумный подход к маскированию значений nan и при этом извлечению релевантных признаков для класса, где входные данные могут варьироваться подобным образом.

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

Подход к класификации многомерных временных рядов с переменным количеством входных данных

Введение

Вы имеете дело с задачей классификации многомерных временных рядов, где каждый образец содержит 100 признаков и состоит из 24 временных шагов. Однако, в вашем наборе данных присутствуют пропущенные значения (NaN), которые могут затруднить анализ. Ниже описан комплексный подход к решению этой проблемы с использованием рекуррентных нейронных сетей (RNN) или LSTM.

1. Предобработка данных

Перед тем как использовать нейронные сети, важно правильно подготовить данные.

  • Заполнение NaN значений: Существует несколько подходов к обработке пропущенных данных:

    • Заполнение медианой/средним: Отображение тех значений, которые не являются NaN. Это особенно полезно, если данные не имеют значительных выбросов.
    • Интерполяция: Интерполяция между соседними значениями может помочь заполнить пропуски, сохраняя тем самым временную последовательность.
    • Маскирование: Вместо заполнения значений, можно создать маску, которая показывает, какие значения пришли от правильных признаков, а какие – от NaN. Это позволит сети игнорировать пропуски во время обучения.
  • Нормализация: Нормализуйте ваши данные, чтобы улучшить сходимость модели. Это можно сделать, например, с помощью стандартного масштабирования (StandardScaler) или Min-Max нормализации.

2. Архитектура модели

Для решения данной задачи можно использовать архитектуру на основе LSTM:

  • Входной слой: Сформируйте входной слой, который принимает данные в виде трехмерного тензора [батч, временные шаги, признаки]. Если у вас имеется маска, дополните входной тензор соответствующей размерностью.

  • Слоi LSTM: Используйте несколько слоёв LSTM для извлечения временных зависимостей. Для повышенной производительности можно использовать return_sequences=True в промежуточных слоях, чтобы передавать всю последовательность на следующий уровень.

  • Слой внимания (опционально): В зависимости от задачи может быть полезным добавить слой внимания, чтобы фокусироваться на определенных временных шагах и признаках, что может улучшить понимание контекста.

  • Полносвязный слой: В конце добавьте полносвязный слой с активацией softmax (или sigmoid, в зависимости от ваших классов), чтобы получить класс на выходе.

3. Компиляция и обучение модели

  • Функция потерь: Используйте категориальную кросс-энтропию для многоклассовой классификации, если у вас несколько классов.

  • Оптимизатор: Adam является популярным оптимизатором, который хорошо работает с LSTM.

  • Обучение: Разделите данные на обучающую и тестовую выборки. При обучении используйте раннее остановку (Early Stopping), чтобы избежать переобучения.

4. Оценка результатов

После обучения модели проведите оценку на тестовой выборке, используя метрики, такие как точность (accuracy), F1-мера и матрица путаницы.

5. Дополнительные советы

  • Тестирование различных гиперпараметров: Изменение количества слоев, единиц LSTM и скорости обучения может существенно повлиять на производительность.

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

Заключение

С таким подходом можно эффективно управлять многомерными временными рядами с переменным количеством входных данных и пропущенными значениями, научив модель классифицировать их, даже несмотря на вызовы, связанные с ненадежными данными.

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

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