Вопрос или проблема
Я обучил модель GRU на некоторых данных и затем создал множество предсказаний на тестовом наборе.
Предсказания действительно плохие, о чем свидетельствует почти нулевой коэффициент детерминации R2.
Я замечаю, что дисперсия предсказаний модели значительно меньше, чем реальных обучающих данных. То есть, кажется, что модель переобучилась на среднее значение:
Но почему так? Я позаботился о том, чтобы остановить обучение / использовать гиперпараметры, когда не происходило переобучение модели, так почему предсказания модели сосредоточены вокруг среднего и менее разбросаны, чем реальная дисперсия набора данных?
Моя модель, если это имеет значение:
model = Sequential()
model.add(GRU(100, activation='relu', input_shape=(3, 280), recurrent_dropout = 0.2, dropout = 0.2))
model.add(Dense(1))
model.compile(optimizer="adam", loss="mse", metrics=['mae'])
model.summary()
# обучение модели
history = model.fit(X_train, y_train, epochs=40, verbose=1, validation_split=0.33)
Первое, что вы можете сделать, это масштабировать ваши выходные данные перед обучением модели. Например
$$
\dfrac{x_i – \bar{x}_{train}}{\sigma_{x_{train}}}
$$
Если это не сработает, то вы можете взглянуть на модель и / или параметры обучения.
Ответ или решение
Проблема, с которой вы столкнулись, заключается в том, что дисперсия предсказаний вашей модели значительно меньше дисперсии исходных данных, что указывает на возможные проблемы в построении модели или ее обучении. Давайте рассмотрим причины такого поведения и возможные способы их решения.
1. Переобучение модели
Хотя вы утверждаете, что следили за переобучением и выбрали гиперпараметры, при которых его не наблюдается, важно отметить, что это может быть не всегда очевидным. Иногда модель может переобучаться, сохраняя низкую ошибку на обучающем наборе данных, но вообще не способна обобщать на новом наборе данных, что приводит к предсказаниям, сильно сосредоточенным вокруг среднего значения.
Рекомендации:
- Убедитесь в использовании кросс-валидации для точной оценки производительности вашей модели.
- Попробуйте снижать сложность модели (например, уменьшить количество нейронов в GRU или использовать менее глубокую архитектуру).
2. Нормализация или стандартизация данных
Как вы упомянули, нормализация или стандартизация ваших выходных данных может существенно повлиять на обучение модели. Если вы используете данные, диапазон значений которых слишком широк, модель может стремиться предсказывать только значения, близкие к центру этого диапазона.
Рекомендации:
- Примените стандартное отклонение (z-нормализация) или минимально-максимальную нормализацию к целевым переменным перед обучением модели. Это позволит вам лучше справляться с масштабом значений.
3. Архитектура модели и её параметры
Вы используете GRU-архитектуру с определенной интеграцией и параметрами. Важно убедиться, что архитектура не слишком либо слишком проста для решения вашей задачи.
Рекомендации:
- Проверьте различные функции активации. В частности, использование
relu
может привести к тому, что некоторые нейроны будут неактивны (проблема "исчезающего градиента"). - Протестируйте различные количества эпох и подберите оптимальную. Иногда модель может быть недостаточно обучена, но это не всегда очевидно.
4. Позиция данных
Некоторые модели чувствительны к тому, как были подготовлены входные данные. Если вы, например, использовали разные прерывания в тренде данных или слишком сильные шумы, это может повлиять на их дискриминативные способности.
Рекомендации:
- Проверьте наличие и наличие выбросов и шумов в данных, а также их распределение — возможно, они не представляют вашу задачу корректно.
- Оцените, стоит ли подписывать данные в другие категории (например, преобразовать временные ряды в стационарные).
Заключение
Предсказания вашей GRU модели, сосредотачивающиеся вокруг среднего значения, указывают на недостаточное представление о целевом пространстве значений. Решение этой проблемы требует комплексного подхода, включающего оптимизацию архитектуры, предобработку данных, применение правильных метрик оценки модели и оценку гиперпараметров.
Следуя представленным рекомендациям, вы сможете устранить проблемы, вызывающие такой характер предсказаний, и повысить качество работы вашей модели.