Структурированный блокнот   
 Машинное обучение (Machine Learning, обучающиеся алгоритмы) →  Обучение с учителем (Supervised learning) →  Линейная регрессия (linear regression) →  С множеством переменных →  

Масштабирование факторов (feature scaling)

Необходимая процедура для нормальной (быстрой) работы градиентного спуска по многим переменным. Суть процедуры в том, чтобы привести все переменные x1, ... xN в единый "масштаб". Например, чтобы все факторы лежали в диапазоне от 0 до 1.
Таким образом вместо реальных факторов x1, ..., xN мы строим отмасштабированные z1, ... , zN следующим образом:
1) Для всех x1 считаем max и min. После этого для каждого x1 считаем z1 = (x1-min)/(max-min) -- в результате все значение z1 будут как раз лежать в диапазоне от 0 до 1. Здесь может быть проблема в случае если есть очень редкие min, max, а большинство значений лежат в гораздо более узком диапазоне. На этот случай можно использовать более сложный подход...
2) Вместо min и max берём перцентили (например 5% и 95%), в остальном без изменений -- здесь всё ещё может не повезти с формой распределения, но очень сильного перекоса из-за одного большого значения уже не будет.
3) Совсем другой подход: считаем среднее и среднее квадратичное отклонение по каждой оси и потом вычитаем среднее и делим на среднее квадратичное -- так мы получаем величину имеющую в среднем единичное среднеквадратичное отклонение, независимо от того, какой это распределение формы. Такая коррекция наиболее популярно.

Если осуществлять градиентный спуск с переменными сильно разного масштаба, сходимость алгоритма будет замедлена (может быть и в десятки раз), т.к. шаг градиента будет неравномерен по разным осям и где-то он будет слишком большим, нам придётся уменьшать шаг (а он уменьшится по всем осям), как следствие будут оси, где шаг градиента будет слишком маленьким и мы будем слишком много итераций идти к минимуму.
Это можно понять на примере оптимизации функции y = x1**2 + 1000 * x2**2. Шаг градиента по x2 будет типично в 1000 раз больше, чем по x1. Если шаг обучения приемлем для x2, то для x1 с этим шагом мы будем идти в 1000 раз дольше, чем могли бы.
Поиск по записям в текущем разделе: