Я строю регрессионные модели. В качестве шага предварительной обработки я масштабирую значения моих объектов так, чтобы они имели среднее значение 0 и стандартное отклонение 1. Необходимо ли также нормализовать целевые значения?
источник
Я строю регрессионные модели. В качестве шага предварительной обработки я масштабирую значения моих объектов так, чтобы они имели среднее значение 0 и стандартное отклонение 1. Необходимо ли также нормализовать целевые значения?
Давайте сначала проанализируем, почему выполняется масштабирование объектов. Функция масштабирования улучшает сходимость алгоритмов наискорейшего спуска, которые не обладают свойством масштабной инвариантности.
В примерах обучения стохастического градиентного спуска итеративно сообщайте обновления веса следующим образом:
Где - веса, - размер шага, - градиент относительно весов, - функция потерь, - функция, параметризованная , - обучающий пример, а - ответ / метка.
Сравните следующие выпуклые функции, представляющие правильное масштабирование и неправильное масштабирование.
Шаг за одно обновление веса size даст намного лучшее снижение ошибки в правильно масштабированном случае, чем неправильно масштабированном случае. Ниже показано направление длины .
Нормализация вывода не повлияет на форму , поэтому обычно это не требуется.
Единственная ситуация, которую я могу себе представить, - это масштабирование выходных данных, если ваша переменная отклика очень велика и / или вы используете переменные f32 (что характерно для линейной алгебры GPU). В этом случае возможно получить переполнение с плавающей запятой элемента весов. Симптом - это либо значение Inf, либо оно переходит в другое предельное представление.
Вообще, это не обязательно. Масштабирование входных данных помогает избежать ситуации, когда один или несколько признаков доминируют над другими по величине, в результате модель почти не учитывает вклад переменных меньшего масштаба, даже если они сильные. Но если вы масштабируете цель, ваша средняя квадратическая ошибка автоматически масштабируется. MSE> 1 автоматически означает, что вы делаете хуже, чем постоянный (наивный) прогноз.
источник
Нет, линейные преобразования ответа никогда не нужны. Однако они могут быть полезны для интерпретации вашей модели. Например, если ваш ответ указан в метрах, но, как правило, очень мал, может быть полезно изменить масштаб, например, до миллиметров. Также обратите внимание, что центрирование и / или масштабирование входов могут быть полезны по той же причине. Например, вы можете приблизительно интерпретировать коэффициент как влияние на ответ на единицу измерения в предикторе, когда все остальные предикторы установлены в 0 . Но 0 часто не будет действительным или интересным значением для этих переменных. Центрирование входных данных позволяет интерпретировать коэффициент как эффект на единицу изменения, когда другие предикторы принимают свои средние значения.
Другие преобразования (например, log или square root) могут быть полезны, если ответ не является линейным в предикторах в исходном масштабе. Если это так, вы можете прочитать об обобщенных линейных моделях, чтобы увидеть, подходят ли они для вас.
источник
Это действительно влияет на градиентный спуск в плохом пути. Проверьте формулу для градиентного спуска:
допустим, что - это функция, которая в 1000 раз больше, чемx2 x1
для имеем . Оптимальным способом достижения (0,0), который является глобальным оптимумом, является перемещение по диагонали, но если одна из особенностей доминирует над другой с точки зрения масштаба, что не произойдет.F(x⃗ )=x⃗ 2 ΔF(x⃗ )=2∗x⃗
Для иллюстрации: если вы выполняете преобразование , одинаковую скорость обучения для обеих координат и рассчитайте градиент, тогдаФункциональная форма та же, но скорость обучения для второй координаты должна быть скорректирована до 1/1000 от скорости для первой координаты, чтобы соответствовать ей. Если не координата, два будут доминировать, и вектор будет направлен больше в этом направлении.z⃗ =(x1,1000∗x1) γ zn+1→=zn→−γΔF(z1,z2). Δ
В результате он смещает дельту, чтобы указывать только в этом направлении, и замедляет схождение.
источник
Да , вам нужно масштабировать целевую переменную. Я процитирую эту ссылку :
В справочном материале также приведена демонстрация кода, где веса моделей взорвались во время обучения с учетом очень больших ошибок и, в свою очередь, также были взорваны градиенты ошибок, рассчитанные для обновлений веса. Короче говоря, если вы не масштабируете данные и у вас очень большие значения, обязательно используйте очень маленькие значения скорости обучения. Об этом также упоминал @drSpacy.
источник