Нормализация данных — это важный шаг в подготовке данных для обучения предсказательных моделей. Но не всегда и не для всех типов данных нормализация обязательна. Разберёмся, когда стоит делать нормализацию, а когда можно обойтись без неё.
1. Когда делать нормализацию
1.1 Когда алгоритмы обучения, чувствительные к масштабу данных
Если используем алгоритмы, которые зависят от расстояний между объектами датасета (это отличие значений в ячейках таблицы, выраженное в числовом эквиваленте, например вектор), например, K-ближайшие соседи (from sklearn.neighbors import KNeighborsClassifier, KNeighborsRegressor) или метод опорных векторов (from sklearn.svm import SVC), то нормализация поможет им работать лучше.
Алгоритмы и масштаб данных в датасете
- Деревья решений (Decision Trees). Эти модели строят дерево, разделяя данные на основе значений признаков, поэтому масштаб значений не влияет на результат.
- Случайный лес (Random Forest). Это ансамбль деревьев решений, так что он также не чувствителен к масштабу данных.
- Градиентный бустинг (Gradient Boosting). Модели, которые строят предсказания с помощью последовательного добавления деревьев решений, также не требуют нормализации.
- Методы опорных векторов (SVM) с ядром. Если используешь SVM с нелинейным ядром, оно может быть менее чувствительно к масштабу, особенно если размеры признаков варьируются. Но линейное SVM может нуждаться в нормализации.
- Наивный байесовский классификатор (Naive Bayes). Этот алгоритм основан на вероятностях и не зависит от масштабов признаков.
- Логистическая регрессия. Хотя она чувствительна к масштабам, нормализация необходима, для гарантии того, что признаки будут вносить одинаковый вклад в модель. Но тираж и регуляризация могут минимизировать необходимость в нормализации.
1.2 Когда разные масштабы признаков (фичей, от англ. feathces)
Масштаб признаков – это диапазон значений в столбцах с числовыми значениями. Если у тебя есть признаки с разными единицами измерения (например, возраст и доход), нормализация поможет сбалансировать их влияние на модель.
2. Когда не делать нормализацию
2.1 Когда в качестве предсказательных моделей выступают деревья решений (Decision Tree) и ансамбли (стэкинг, бэггинг, случайные леса и др.)
Модели вроде деревьев решений, случайного леса (Random Forest) и градиентного бустинга (Gradient Boosting) не требуют нормализации, так как они основаны на разбиениях и не зависят от масштаба.
2.2. Когда в датастете присутствуют категориальные переменные
Если у тебя есть категориальные переменные (например, пол или город), которые остаются в исходном виде или преобразовываются с помощью One-hot encoding, то нормализация их не касается. Если же категории преобразовать с помощью целочисленного кодирования (label encoding), нормализация может быть применима, так как в этом случае значения могут иметь порядок и масштаб, что может повлиять на результаты обучения модели. Существует несколько подходов к целочисленному кодированию:
- Простое целочисленное кодирование
Каждой категории присваивается уникальное целое число. Например, для категорий «красный», «зеленый», «синий» можно присвоить значения 0, 1 и 2 соответственно. Этот метод прост, но он может ввести порядок между категориями, который не существует в исходных данных. - Пространственное или порядковое кодирование
Используется, когда категории имеют упорядоченную природу. Например, для оценок «низкий», «средний», «высокий» можно присвоить значения 1, 2 и 3. Это работает, если порядок имеет значение. - Обратное кодирование или Target encoding
В этом методе категории кодируются в соответствии с некоторой метрикой целевой переменной, такой как среднее значение целевой переменной для каждой категории. Это позволяет сохранить информацию о зависимости между категориальной переменной и целевой переменной. - Один из K (One-hot Encoding)
Хотя это не является целочисленным кодированием в строгом смысле, оно создает бинарные признаки для каждой категории, тем самым устраняя проблемы с порядком. У каждой категории будет свой бинарный столбец. - Частотное кодирование (Frequency Encoding)
Каждой категории присваивается ее частота в данных. Это может быть полезно для снижения размерности. - Ordinal Encoding
Используется для категорий с иерархическим порядком. Каждой категории присваивается число в соответствии с этим порядком (например, «первый», «второй», «третий»).