Масштабирование признаков: метод, используемый для приведения независимых признаков, присутствующих в данных, в фиксированный диапазон.
Это последнее, что мы делаем в разработке признаков после преобразования, построения, выбора и извлечения признаков. Затем масштабируем значения.
Пример того, зачем нужно масштабирование:
Рассмотрим пример: рост и вес человека, где рост выражается в метрах, например 1 метр, 2 метра и т. д., а вес в килограммах, например 50 кг, 65 кг и т. д., поэтому при вычислении значения расстояния вес функция будет доминировать по высоте и в разных алгоритмах из-за больших значений, если вы напрямую вводите эти значения в алгоритм без масштабирования, а модель имеет тенденцию к смещению.
Типы:
Масштабирование функций делится на две части.
- Стандартизация
- Нормализация
Стандартизация:
Это полезно, когда данные следуют нормальному распределению. Геометрически он преобразует (сдвигает) данные к среднему значению исходных данных в начало координат (μ=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)
Когда использовать стандартизацию:
Точность моделей будет увеличиваться в некоторых алгоритмах при масштабировании.
- Градиентный спуск: тета-вычисления станут быстрее, а скорость обучения в стохастическом градиентном спуске одинакова для всех параметров.
- Искусственные нейронные сети: применение градиентного спуска.
- Перед K-ближайшим соседом: измерьте расстояние между парами выборок, и на их расстояния влияют единицы измерения.
- До кластеризации K-средних:из-за измерения евклидова расстояния
- До SVM:из-за измерения евклидова расстояния.
- Лассо и гребенчатая регрессия. Он накладывает ограничения на размер коэффициентов для каждой переменной относительно величины, и пересечения не будет.
- Перед анализом основных компонентов (PCA): постарайтесь получить функцию с максимальной дисперсией.
- Перед измерением важности переменной: особенно в регрессионных моделях.
Когда не нужно применять:
- Дерево решений, XG-Boost, Gradient Boost: не влияет на точность.
- Случайный лес, методы бэгинга (алгоритмы на основе деревьев довольно нечувствительны к масштабу функций).
Нормализация:
Этот метод часто применяется при подготовке данных в ML. Цель состоит в том, чтобы изменить значения числовых столбцов для использования общей шкалы без искажения различных диапазонов значений или потери информации.
- Мин макс скаляр
- Средняя нормализация
- Максимальный абсолютный
- Надежный скаляр
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.