Регрессия нейронной сети с отрицательной производительностью

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

У меня есть проблема с производительностью многослойного перцептрона-регрессора (нейронной сети), и я не могу понять, почему.

Задача: Я пытаюсь улучшить прогноз времени. У меня есть прогнозы физического параметра за последние 4 года вместе с почти истинными значениями. Я обучаю нейронную сеть с прогнозами за -7 дней до +1 дня вокруг интересующего меня дня в качестве признаков, чтобы получить лучший прогноз для этого дня.

Проблема: Выход нейронной сети хуже, чем признак для дня, который меня интересует, как для обучающих, так и для тестовых данных. Как по RMSE, так и по MAE. Я ожидал, что выход будет хотя бы на том же уровне, что и признак, который я ввел в нейронную сеть.

Сравнение между RMSE для обучающих и тестовых данных, а также одного из признаков

Метод: Python с sklearn. Я использую поиск по сетке с кросс-валидацией, чтобы получить хорошие гиперпараметры. Я тестирую разные конфигурации скрытых слоев, функции активации, скорость обучения и силы регуляризационного штрафа. Я разделяю данные на 66% для обучения и оставшиеся данные для тестирования.

Я действительно благодарен за советы, как понять, в чем моя проблема.

EDIT:
Я использую sklearn.neural_network.MLPRegressor, который предоставляет ‘identity’, ‘logistic’, ‘tanh’ и ‘relu’ в качестве функций активации, и я протестировал их все в поиске по сетке.

Я НЕ масштабировал матрицу признаков, потому что все признаки находятся в одной единице с желаемым выходом и варьируются от примерно -1 до +1.

EDIT2:

tuned_parameters = [{'hidden_layer_sizes': [int(2/3*number_features),
                                        (int(2/3*number_features), int(4/9*number_features)),
                                        (int(2/3*number_features), int(4/9*number_features), int(8/27*number_features))],
                 'alpha': 10.0 ** -np.arange(1, 4),
                 'activation': ["identity", "relu", "logistic", "tanh"],
                 'learning_rate': ['adaptive', "invscaling"],
                 'solver': ['lbfgs'],
                 'early_stopping': [True],
                 'max_iter': [600]}]

regr = GridSearchCV(MLPRegressor(), tuned_parameters, n_jobs=3, verbose=2)
regr.fit(feature_training_matrix, combined_training_target_vector)

Данные:
Данные для прогнозирования, которые я использую, имеют следующую структуру: для каждого дня последних ~4 лет были сделаны прогнозы на следующие 90 дней. У меня есть текстовый файл с данными от -90д до +90д для каждого дня. Я пытаюсь обучить нейронную сеть для того, чтобы оценить лучший прогноз на следующие 10 дней. Для этого я беру от -7 до +1 дня вокруг текущего дня прогноза (1-10 дней после того, как текущий используется для прогнозирования) в качестве признаков. Это означает, что прогноз интересующего меня дня включен в качестве признака.

пример признака: [0.16272058, 0.13296574, 0.14213905, 0.25064893, 0.23302285,
   0.21019931, 0.20733988, 0.1466959 , 0.17029025, 0.15876942]

соответствующая цель: 0.174652

Совершенно возможно, что оригинальная модель уже работает очень хорошо – невозможно ее улучшить. Например, истинная связь между оригинальными входными переменными и целью может быть линейной, поэтому нейронная сеть ничего не добавляет.

В качестве теста я бы увеличил hidden_layer_sizes и установил early_stopping=False и даже просто провел поиск по сетке (без CV): RMSE Training должен стать лучше, чем RMSE Feature. Скорее всего, RMSE Testing будет хуже, но по крайней мере у вас будет доказательство того, что нет никаких других неожиданных обстоятельств (например, ошибки в коде).

Имеет смысл использовать прогнозы базовой модели в качестве входов. Особенно если оригинальная базовая модель каким-то образом ограничена, и вы ожидаете, что ваша новая модель превзойдет оригинальную потому что в новой модели у вас нет этого ограничения. Например, оригинальная модель может быть линейной (ARIMA или ARIMAX), в то время как ваша является нелинейной – нейронной сетью.

Даже если истинная связь между входами и целью является нелинейной, у вас не так много “игрового пространства” для нейронной сети (помните, что мы хотим превзойти базовую модель). Насколько я понимаю, у вас всего ~ 4*365 наблюдений. Вы легко можете переобучиться с множеством нейронов, но с лишь несколькими нейронами обучение может застрять в локальных минимумах.

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

Негативная производительность регрессии нейронной сети: анализ и рекомендации

Введение

Ваша задача по улучшению предсказания временных рядов с использованием многослойного перцептрона (MLP) на основе исторических данных довольно сложна и многогранна. Несмотря на многообещающие исходные данные, вы столкнулись с проблемой, когда производительность модели хуже, чем исходные предсказания. Это требует детального анализа и системного подхода к решению проблемы.

Анализ проблемы

На основе предоставленной информации можно выделить несколько ключевых моментов:

  1. Данные: У вас есть предсказания физического параметра за последние 4 года, что достаточно для обучения нейронной сети. Однако важно обратить внимание на объем данных, а именно: всего около 1460 наблюдений. Это может стать ограничивающим фактором, особенно если структура модели слишком сложная.

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

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

  4. Сложность модели: Вы использовали сетевые структуры, которые могут быть избыточными для имеющегося объема данных. Возможно, стоит поэкспериментировать с меньшим количеством нейронов или слоев.

  5. Случайный шум: Поскольку данные имеют определенный уровень шума, нейронная сеть может подстраиваться под случайные вариации, что приводит к переобучению (overfitting). Практика использования обучения с регуляризацией (например, L2 регуляризация) может помочь избежать этой проблемы.

Рекомендации по улучшению

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

  2. Масштабирование данных: Внедрение методов предварительной обработки данных, таких как масштабирование, может помочь нейронной сети более эффективно обучаться и адаптироваться к целевым значениям.

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

  4. Измерение ошибок: Параллельно проводите расчет метрик RMSE и MAE для различных этапов обучения и тестирования. Если метрики действительно становятся хуже с каждым шагом, это свидетельствует об ошибке в архитектуре модели или данных.

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

  6. Изменение гиперпараметров: Проведите дополнительное тестирование с гиперпараметрами max_iter и early_stopping. Убедитесь, что обучение происходит в течение достаточного времени, и исключите раннюю остановку на начальных этапах, чтобы позволить модели полностью сойти.

Заключение

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

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

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