Предсказанное значение более концентрировано, чем фактическое, с использованием DNN.

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

Я создал модель глубокого нейронного сети с использованием Keras.

def nopitid_model(optimizer,loss="mean_squared_error",epochs=50):
model = Sequential()
model.add(Dense(24, input_dim=24, kernel_initializer="normal", activation='relu'))
model.add(Dense(15, activation='relu'))
model.add(Dense(10, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(5, activation='relu'))
model.add(Dense(1,))
# # Компиляция модели
model.compile(loss=loss, optimizer=optimizer)
prediction = model.fit(x=X_norm,y=Y,batch_size=int(X_norm.shape[0]/5),
          verbose=0,
          epochs=epochs,
          validation_split=0.3)
return model,prediction

Средняя абсолютная ошибка составляет около 5%, что приемлемо. Однако, после построения графика предсказанных значений против фактических, я заметил, что предсказанные значения разбросаны между 1260 – 1290, тогда как фактические данные варьируются от 800 до 1600. Более интересно, некоторые предсказанные значения также можно наблюдать на уровне 1230. Я не могу понять, что могло это вызвать.
Ищу любые предложения.

enter image description here

Похоже, что ваша модель не многому научилась и почти всегда предсказывает среднее значение целевого распределения. Пожалуйста, проверьте, находится ли среднее значение фактической целевой переменной в диапазоне 1260-90.

Это может произойти, если ваши признаки не коррелируют с целью.
Кроме того, судя по вашему графику, средняя абсолютная ошибка определенно больше 5%.

Вам стоит собрать более информативные признаки для вашей модели.

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

Теория

Ваш случай с прогнозированием значений, которые по большей части сосредоточены вокруг определённого диапазона (1260-1290), в то время как реальные данные варьируются в более широком диапазоне (800-1600), часто встречается в моделях, где нейронная сеть не способна обучиться должным образом. Неслучайно такой результат часто можно наблюдать в ситуациях, когда параметры входа слабо коррелируют с целевыми значениями или когда нейронная сеть недостаточно сложная для моделирования сложных паттернов в данных.

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

Пример

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

Ещё одной возможной причиной может быть то, что структура вашей сети слишком проста для задачи. Это, например, может быть связано с количеством и размерами слоёв сети, что ограничивает её способность обучаться на сложных паттернах данных. Исходя из вашей конфигурации: у вас пять скрытых слоёв с 24, 15, 10, 8, и 5 нейронами соответственно. Для более сложной задачи может потребоваться больше нейронов и/или слоёв.

Применение

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

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

  3. Подготовка данных: Нормализация данных может улучшить результаты вашей нейросети. Различные методы нормализации, например, Min-Max, Z-score, могут повлиять как на обучение, так и на интерпретацию предсказанных значений.

  4. Эксперименты с гиперпараметрами: Попробуйте использовать различные оптимизаторы (например, Adam, RMSprop) и изменить параметры обучения, такие как скорости обучения и batch_size. Другие варианты, включающие в себя тестирование разных функций потерь и регуляризации, могут помочь избежать переобучения.

  5. Кросс-валидация: Проведение кросс-валидации также может предоставить дополнительные оценки качества модели и уменьшить вероятность оверфиттинга модели на обучающем наборе данных.

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

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

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

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