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

Это последнее, что мы делаем в разработке признаков после преобразования, построения, выбора и извлечения признаков. Затем масштабируем значения.

Пример того, зачем нужно масштабирование:

Рассмотрим пример: рост и вес человека, где рост выражается в метрах, например 1 метр, 2 метра и т. д., а вес в килограммах, например 50 кг, 65 кг и т. д., поэтому при вычислении значения расстояния вес функция будет доминировать по высоте и в разных алгоритмах из-за больших значений, если вы напрямую вводите эти значения в алгоритм без масштабирования, а модель имеет тенденцию к смещению.

Типы:

Масштабирование функций делится на две части.

  1. Стандартизация
  2. Нормализация

Стандартизация:

Это полезно, когда данные следуют нормальному распределению. Геометрически он преобразует (сдвигает) данные к среднему значению исходных данных в начало координат (μ=o) и сжимает или расширяет точки до единичного стандартного отклонения (σ=1) соответственно без влияет на форму распределения.

Он используется, когда данные представлены в разных масштабах/единицах или имеют большую разницу в диапазонах, и на них не влияют выбросы, поскольку нет предопределенного диапазона преобразованных признаков.

То есть, стандартизировав значения, мы получаем следующую статистику по распределению данных:

mean = 0 (среднее центрирование)

стандартное отклонение = 1 (масштабированные значения могут быть как +ve, так и -ve)

Интуиция кода:

#from sklearn module we are importing standard scalar
from sklearn.preprocessing import StandardScaler
#creating a standard scalar object as scalar
scaler=StandardScaler()
#fit the data into scaler it will learn parameters
scaler.fit(x_train)
#transform train and test split into requirement for standardization
x_train_scaled=scaler.transform(x_train)
x_test_scaled=scaler.transform(x_test)

Когда использовать стандартизацию:

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

  1. Градиентный спуск: тета-вычисления станут быстрее, а скорость обучения в стохастическом градиентном спуске одинакова для всех параметров.
  2. Искусственные нейронные сети: применение градиентного спуска.
  3. Перед K-ближайшим соседом: измерьте расстояние между парами выборок, и на их расстояния влияют единицы измерения.
  4. До кластеризации K-средних:из-за измерения евклидова расстояния
  5. До SVM:из-за измерения евклидова расстояния.
  6. Лассо и гребенчатая регрессия. Он накладывает ограничения на размер коэффициентов для каждой переменной относительно величины, и пересечения не будет.
  7. Перед анализом основных компонентов (PCA): постарайтесь получить функцию с максимальной дисперсией.
  8. Перед измерением важности переменной: особенно в регрессионных моделях.

Когда не нужно применять:

  1. Дерево решений, XG-Boost, Gradient Boost: не влияет на точность.
  2. Случайный лес, методы бэгинга (алгоритмы на основе деревьев довольно нечувствительны к масштабу функций).

Нормализация:

Этот метод часто применяется при подготовке данных в ML. Цель состоит в том, чтобы изменить значения числовых столбцов для использования общей шкалы без искажения различных диапазонов значений или потери информации.

  1. Мин макс скаляр
  2. Средняя нормализация
  3. Максимальный абсолютный
  4. Надежный скаляр

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

Выбросы также сглаживаются по шкале от 0 до 1, так что влияние тоже присутствует.

Интуиция кода:

#from sklearn module we are importing minmax-scalar
from sklearn.preprocessing import MinMaxScaler
#creating a minmax-scalar object as scalar
scaler=MinMaxScaler()
#fit the data into scaler it will learn parameters
scaler.fit(x_train)
#transform train and test split into requirement for standardization
x_train_scaled=scaler.transform(x_train)
x_test_scaled=scaler.transform(x_test)

2. Нормализация среднего:когда нам нужно масштабировать каждый признак от 0 до 1 и требуются центрированные данные (центрирование среднего), мы используем нормализацию среднего. В scikit-learn нет кода; нам нужен жесткий код, поэтому в основном мы используем стандартный скаляр.

3. Максимальное абсолютное значение: масштабируйте каждую функцию по ее абсолютному максимальному значению. Этот оценщик масштабирует и преобразует каждую функцию по отдельности, так что максимальное абсолютное значение каждой функции в обучающем наборе будет равно 1.

Он не сдвигает/центрирует данные и, таким образом, не уничтожает разреженность. Таким образом используется в разреженных данных.

Интуиция кода:

#from sklearn module we are importing MaxAbsoluteScaler
from sklearn.preprocessing import MaxAbsScaler
#creating a MaxAbsoluteScaler object as scalar
scaler=MaxAbsScaler()
#fit the data into scaler it will learn parameters
scaler.fit(x_train)
#transform train and test split into requirement for standardization
x_train_scaled=scaler.transform(x_train)
x_test_scaled=scaler.transform(x_test)

4.Надежный скаляр. Этот скалер удаляет медиану и масштабирует данные в соответствии с квантильным диапазоном (по умолчанию используется IQR: межквартильный диапазон). IQR — это диапазон между 1-м квартилем (25-й квантиль) и 3-м квартилем (75-й квантиль).

Он устойчив к выбросам из-за использования медианы и масштабирования до единичной дисперсии.

Интуиция кода:

#from sklearn module we are importing RobustScaler
from sklearn.preprocessing import RobustScaler
#creating a RobustScaler object as scalar
scaler=RobustScaler()
#fit the data into scaler it will learn parameters
scaler.fit(x_train)
#transform train and test split into requirement for standardization
x_train_scaled=scaler.transform(x_train)
x_test_scaled=scaler.transform(x_test)

Выводы:

  • Изучите данные и посмотрите, требуется ли масштабирование функций.
  • Нормализация полезна, когда вы знаете, что распределение ваших данных не соответствует распределению Гаусса. Стандартизация, наоборот.
  • Однако это не обязательно должно быть правдой. Кроме того, в отличие от нормализации, стандартизация не имеет ограничивающего диапазона. Таким образом, даже если в ваших данных есть выбросы, стандартизация не повлияет на них.
  • Если выбросы используют робастный скаляр, а разреженные данные используют максимальный абсолютный скаляр, если мы знаем минимум и максимум данных, используем минимальный максимальный скаляр.
  • Всегда начинайте с подгонки модели к необработанным, нормализованным и стандартизированным данным и сравнения производительности для достижения наилучших результатов.
  • Рекомендуется подгонять скейлер к обучающим данным, а затем использовать его для преобразования тестовых данных. Это позволит избежать утечки данных в процессе тестирования модели. Кроме того, обычно не требуется масштабирование целевых значений.

Спасибо за прочтение!

Подпишитесь на меня, чтобы узнать больше о DS и ML.