Вопрос или проблема
Я работаю над кодом регрессии с использованием нейронной сети. Набор данных включает 14 признаков в диапазоне значений от -1 до 1, в то время как целевая переменная изменяется от (0.000759) до (1100).
Целевые значения масштабируются тремя методами.
- метод 1: логарифмическая шкала
- метод 2: MinMaxScalar
- метод 3: деление на 1100
Но эти методы не смогли добиться лучших результатов. Код не может хорошо обучаться и предсказывать. Особенно при малых значениях целевой переменной, он выдает отрицательные значения в качестве прогноза. Вот полезная информация:
model = Sequential( )
model.add(InputLayer(input_shape= (14, )))
model.add(Dense (14,'tanh' ))
model.add(Dense (5,'tanh' ))
model.add(Dense (3,'tanh' ))
model.add(Dense (1,'linear' ))
Потери: MSE, оптимизатор: adam
Спасибо заранее за ваше внимание
Иногда стоит попробовать использовать статистический алгоритм обучения, такой как регрессия с опорными векторами. Если вы столкнетесь с подобными проблемами там, это может быть другой намек на то, что проблема связана с набором данных. Использование анализа главных компонент для понимания размерности проблемы также может быть полезным. Ненамного другой подход для понимания того, как признаки связаны с целью, заключается в использовании важности признаков по перестановке. С помощью этого можно выяснить, являются ли некоторые из признаков избыточными.
Ответ или решение
Ваша задача состоит в том, чтобы улучшить показатели регрессионной нейронной сети, использующей набор данных с 14 признаками, где значения целевой переменной варьируются от 0.000759 до 1100. Ваша проблема может быть связана с тем, каким образом вы обрабатываете значения целевой переменной и как настраивается модель. Рассмотрим ваши методы масштабирования и их возможное влияние на результаты.
Масштабирование целевых значений
Вы используете три метода для масштабирования целевой переменной:
-
Логарифмическое масштабирование: Этот метод хорошо работает, если данные имеют экспоненциальное распределение. Однако он не подходит для отрицательных значений и значений, близких к нулю, так как логарифм от отрицательных чисел и нуля не определён. В вашем случае использование логарифмического масштабирования может привести к несоответствиям в данных, особенно при попытке вернуть предсказанные значения к исходному масштабу.
-
MinMaxScaler: Этот метод масштабирует данные в диапазоне от 0 до 1. Хотя это удобно, согласно разнице в диапазонах (от 0.000759 до 1100), MinMaxScaler не всегда подходит, если в данных присутствуют выбросы или неравномерное распределение. Бывает, что модель будет предсказывать значения ближе к 0, поскольку она будет пытаться адаптироваться к масштабированным данным.
-
Деление на 1100: Этот подход удобно использовать, однако он слишком прост и может не учитывать другие аспекты данных. Стоит заметить, что если исходное значение близко к 0, вы можете получить значения, которые очень близки к нулю, и это может плохо отразиться на способностях модели.
Проблемы с предсказаниями
-
Отрицательные значения в предсказаниях: Модель предсказывает отрицательные значения, что недопустимо, поскольку целевая переменная не может быть отрицательной. Это может быть связано с тем, что активационная функция на последнем слое — линейная, а сеть не сможет адекватно обучиться на масштабированных данных, особенно если она плохо инициализирована или не имеет достаточной глубины и ширины.
-
Архитектура сети: Ваша модель имеет несколько скрытых слоев с активацией tanh. Функция активации tanh может приводить к затуханию градиента на глубоких сетях, что затрудняет обучение модели. В этом случае целесообразнее рассмотреть альтернативные активационные функции, такие как ReLU, которые часто обеспечивают более быструю конвергенцию.
Рекомендации
-
Измените метод масштабирования: Попробуйте использовать стандартное масштабирование (Standard Scaler), которое нормализует данные с помощью Z-преобразования, уменьшив влияние выбросов.
-
Пересмотрите архитектуру модели: Увеличьте количество нейронов в скрытых слоях или добавьте дополнительные слои. Попробуйте использовать функции активации ReLU или ELU, которые могут улучшить обучение.
-
Проведите исследование данных: Используйте PCA для понимания пространственной структуры признаков, а также проводите оценку значимости признаков, чтобы избавиться от избыточных или нерелевантных признаков.
-
Увеличьте объем данных: Если возможно, увеличьте объем обучающих данных, либо собрав дополнительные данные, либо применив техники аугментации данных.
-
Оптимизация процесса обучения: Рассмотрите возможность настройки гиперпараметров оптимизатора Adam или применения других оптимизаторов, таких как SGD с моментумом.
Следуя этим рекомендациям и подходам, вы сможете улучшить качество предсказаний вашей модели и избежать выхода за допустимые пределы значений. Удачи в работе с вашим проектом!