Обсуждение участника:Imil Baltaniazov
Материал из MachineLearning.
| Строка 1: | Строка 1: | ||
| - | + | {{well|Статья написана с использованием LLM Claude Sonnet 5 и проверена участником Imil Baltaniazov 15:56, 10 июля 2026 (MSD)}} | |
| - | {{well|Статья написана с использованием LLM Claude Sonnet 5 и проверена участником Imil Baltaniazov 15: | + | |
| - | ''' | + | '''Нормализация и стандартизация признаков''' — группа методов [[Предобработка данных|предобработки данных]], предназначенных для приведения числовых [[Признак|признаков]] к сопоставимому масштабу. Эти преобразования не изменяют форму распределения признака по существу (за исключением специальных методов, таких как [[Преобразование Бокса-Кокса|преобразование Бокса—Кокса]]), а лишь линейно или монотонно переносят значения в новый диапазон или к новым статистическим характеристикам. |
== Введение == | == Введение == | ||
| - | + | Многие алгоритмы [[Машинное обучение|машинного обучения]] чувствительны к масштабу входных признаков. Если один признак измеряется в единицах порядка десятков тысяч, а другой — в единицах порядка нескольких единиц, алгоритмы, основанные на вычислении расстояний, скалярных произведений или градиентной оптимизации, начинают неявно придавать больший вес признаку с большим числовым разбросом — вне зависимости от его реальной информативности. Это приводит к смещённым, плохо интерпретируемым и медленно обучающимся моделям. | |
| - | + | Нормализация и стандартизация решают эту проблему, приводя признаки к единой шкале до подачи в модель. Несмотря на то, что оба термина в бытовом употреблении нередко смешиваются, в строгом смысле они обозначают разные преобразования: нормализация переносит значения в фиксированный диапазон (чаще всего <tex>[0,1]</tex>), а стандартизация центрирует признак и приводит его дисперсию к единице. Выбор конкретного метода зависит от природы данных, наличия выбросов и используемого алгоритма. | |
| - | + | ||
| - | + | ||
== Постановка задачи == | == Постановка задачи == | ||
| - | + | Рассмотрим датасет с двумя признаками: возраст клиента (лет) и годовой доход (в рублях). | |
| - | + | {| class="wikitable" | |
| + | |- | ||
| + | ! Клиент !! Возраст, лет !! Доход, руб./год | ||
| + | |- | ||
| + | | 1 || 25 || 450 000 | ||
| + | |- | ||
| + | | 2 || 40 || 1 200 000 | ||
| + | |- | ||
| + | | 3 || 60 || 3 000 000 | ||
| + | |} | ||
| - | + | Возраст изменяется в диапазоне примерно 25–60 (разброс порядка десятков), доход — в диапазоне 450 000–3 000 000 (разброс порядка миллионов). Если такие данные подать, например, в [[Метод k ближайших соседей|метод k ближайших соседей]], евклидово расстояние между объектами будет практически полностью определяться разницей в доходе — вклад возраста окажется пренебрежимо мал, хотя с содержательной точки зрения оба признака могут быть одинаково важны. Аналогичная проблема возникает при обучении [[Линейная регрессия|линейных моделей]] градиентными методами: поверхность функции потерь становится сильно вытянутой вдоль направления признака с малым масштабом, что замедляет сходимость [[Градиентный спуск|градиентного спуска]]. | |
| - | == | + | == Нормализация (min-max scaling) == |
| - | + | '''Нормализация''' (min-max scaling) линейно переносит значения признака в заданный диапазон, обычно <tex>[0,1]</tex>. Для признака <tex>x</tex> преобразование задаётся формулой: | |
| - | + | :: <tex>x' = \frac{x - x_{min}}{x_{max} - x_{min}}</tex> | |
| - | + | где <tex>x_{min}</tex> и <tex>x_{max}</tex> — минимальное и максимальное значения признака на обучающей выборке. Для приведения к произвольному диапазону <tex>[a, b]</tex> используется обобщённая формула: | |
| - | + | :: <tex>x' = a + \frac{(x - x_{min})(b - a)}{x_{max} - x_{min}}</tex> | |
| - | == | + | '''Числовой пример.''' Возьмём признак «возраст» из таблицы выше: значения 25, 40, 60. Тогда <tex>x_{min}=25</tex>, <tex>x_{max}=60</tex>: |
| - | + | * для 25: <tex>x' = (25-25)/(60-25) = 0{,}00</tex> | |
| + | * для 40: <tex>x' = (40-25)/(60-25) = 0{,}43</tex> | ||
| + | * для 60: <tex>x' = (60-25)/(60-25) = 1{,}00</tex> | ||
| - | ''' | + | '''Когда применять.''' Min-max scaling полезен, когда требуется строго ограниченный диапазон значений — например, для входов [[Нейронная сеть|нейронных сетей]] с сигмоидными или tanh-активациями, для алгоритмов обработки изображений (пиксели естественно ограничены), а также когда распределение признака заведомо не является нормальным и не имеет тяжёлых выбросов. |
| - | + | '''Чувствительность к выбросам.''' Основной недостаток метода — сильная зависимость от экстремальных значений <tex>x_{min}</tex> и <tex>x_{max}</tex | |
| + | >. Единственный аномальный объект способен «сжать» основную массу данных в узкий поддиапазон. Например, если среди клиентов появится доход в 50 000 000 руб., все остальные значения дохода после нормализации окажутся сосредоточены вблизи нуля, потеряв различимость. | ||
| - | + | В библиотеке scikit-learn метод реализован классом <code>MinMaxScaler</code>. | |
| - | + | == Стандартизация (z-score) == | |
| - | + | '''Стандартизация''' (standardization, z-score normalization) центрирует признак относительно среднего и масштабирует его так, чтобы [[Дисперсия случайной величины|дисперсия]] стала равна единице. Формула преобразования: | |
| - | + | :: <tex>x' = \frac{x - \mu}{\sigma}</tex> | |
| - | + | где <tex>\mu</tex> — выборочное среднее признака, <tex>\sigma</tex> — выборочное [[Среднеквадратичное отклонение|стандартное отклонение]]: | |
| - | :: <tex>\ | + | :: <tex>\mu = \frac{1}{n}\sum_{i=1}^{n} x_i, \qquad \sigma = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_i - \mu)^2}</tex> |
| - | + | После преобразования признак имеет нулевое среднее и единичную дисперсию: <tex>E[x']=0</tex>, <tex>Var(x')=1</tex>. Полученные значения называют '''z-оценками''' (z-scores) — они показывают, на сколько стандартных отклонений конкретное наблюдение отстоит от среднего. | |
| - | + | '''Числовой пример.''' Для того же признака «возраст» (25, 40, 60): <tex>\mu = 41{,}67</tex>, <tex>\sigma \approx 14{,}36</tex>. Тогда: | |
| - | == | + | * для 25: <tex>x' = (25-41{,}67)/14{,}36 \approx -1{,}16</tex> |
| + | * для 40: <tex>x' = (40-41{,}67)/14{,}36 \approx -0{,}12</tex> | ||
| + | * для 60: <tex>x' = (60-41{,}67)/14{,}36 \approx 1{,}28</tex> | ||
| - | ''' | + | '''Когда применять.''' Стандартизация — наиболее универсальный выбор для большинства алгоритмов, использующих градиентную оптимизацию ([[Логистическая регрессия|логистической регрессии]], [[Метод опорных векторов|SVM]], нейронных сетей), а также для методов, опирающихся на предположения о нормальном распределении данных или на разложение [[Ковариационная матрица|ковариационной матрицы]], в первую очередь для [[Метод главных компонент|метода главных компонент]] (PCA). В отличие от min-max scaling, стандартизация не привязана к жёсткому диапазону, поэтому она устойчивее к добавлению новых наблюдений и мягче реагирует на умеренные выбросы, хотя среднее и стандартное отклонение сами по себе также чувствительны к экстремальным значениям. |
| - | + | Важно подчеркнуть: стандартизация не делает распределение признака нормальным — она лишь центрирует и масштабирует его, сохраняя исходную форму распределения (асимметрию, эксцесс). | |
| - | + | В scikit-learn метод реализован классом <code>StandardScaler</code>. | |
| - | == | + | == Робастное масштабирование == |
| - | + | '''Робастное масштабирование''' (robust scaling) — метод, использующий устойчивые к выбросам статистики: [[Медиана|медиану]] и [[Интерквартильный размах|межквартильный размах]] (IQR) вместо среднего и стандартного отклонения. Формула: | |
| - | ' | + | :: <tex>x' = \frac{x - Q_2}{Q_3 - Q_1}</tex> |
| - | + | где <tex>Q_2</tex> — медиана (второй квартиль), <tex>Q_1</tex> и <tex>Q_3</tex> — первый и третий квартили, а разность <tex>Q_3 - Q_1 = IQR</tex> — межквартильный размах, охватывающий центральные 50% наблюдений. | |
| - | ''' | + | '''Устойчивость к выбросам.''' Поскольку медиана и квартили являются робастными статистиками — их значение определяется порядком наблюдений, а не их абсолютной величиной, — единичные аномальные значения практически не влияют на результат преобразования. Это ключевое отличие от min-max scaling и стандартизации, где выброс напрямую входит в вычисление масштабирующих параметров (<tex>x_{max}</tex>, <tex>\mu</tex>, <tex>\sigma</tex>). |
| - | + | '''Пример влияния выброса.''' Пусть к выборке дохода (450 000, 1 200 000, 3 000 000) добавлено аномальное значение 50 000 000. При min-max scaling три «нормальных» наблюдения сожмутся в диапазон около 0–0,05. При робастном масштабировании медиана и IQR практически не изменятся, и относительное положение исходных наблюдений останется информативным. | |
| - | + | Метод рекомендуется использовать при работе с данными, содержащими выбросы, которые нежелательно удалять (например, в финансовых или медицинских данных, где экстремальные значения могут быть содержа | |
| + | тельно важны). | ||
| - | + | В scikit-learn метод реализован классом <code>RobustScaler</code>. | |
| - | + | == Другие методы масштабирования == | |
| - | * ''' | + | * '''MaxAbsScaler''' — делит значения признака на максимум по модулю: <tex>x' = x / \max(|x|)</tex>. Результат лежит в диапазоне <tex>[-1, 1]</tex>, при этом сохраняется знак и разреженность данных (нулевые значения остаются нулевыми), поэтому метод удобен для разреженных матриц. |
| - | * ''' | + | * '''PowerTransformer''' — семейство степенных преобразований (Бокса—Кокса и Йео—Джонсона), приближающих распределение признака к нормальному. Преобразование Бокса—Кокса применимо только к строго положительным значениям: |
| - | + | :: <tex>x^{(\lambda)} = \begin{cases} \dfrac{x^\lambda - 1}{\lambda}, & \lambda \neq 0 \\ \ln(x), & \lambda = 0 \end{cases}</tex> | |
| - | + | Преобразование Йео—Джонсона обобщает эту формулу на случай отрицательных и нулевых значений. Параметр <tex>\lambda</tex> подбирается по максимуму правдоподобия. Метод полезен для сильно скошенных распределений (доход, цены, время ожидания), после которых применение стандартизации даёт более симметричные признаки. | |
| - | == | + | * '''QuantileTransformer''' — непараметрическое преобразование, отображающее эмпирическую функцию распределения признака на равномерное или нормальное распределение. Метод наиболее устойчив к выбросам среди перечисленных, поскольку явно «сжимает» хвосты распределения, но является нелинейным и может исказить взаимные расстояния между близкими наблюдениями. |
| + | |||
| + | == Влияние на алгоритмы машинного обучения == | ||
| + | |||
| + | Чувствительность алгоритмов к масштабу признаков определяется тем, используют ли они расстояния, скалярные произведения или величину коэффициентов в функции потерь. | ||
{| class="wikitable" | {| class="wikitable" | ||
| - | |||
|- | |- | ||
| - | | | + | ! Алгоритм !! Чувствительность к масштабу !! Обоснование |
| + | |- | ||
| + | | [[Линейная регрессия]], [[Логистическая регрессия]] || Высокая || Градиентная оптимизация и регуляризация зависят от масштаба коэффициентов | ||
| + | |- | ||
| + | | [[Метод опорных векторов|SVM]] || Высокая || Оптимизация зазора и ядровые функции зависят от геометрии пространства признаков | ||
| + | |- | ||
| + | | [[Метод k ближайших соседей|KNN]] || Высокая || Классификация напрямую основана на евклидовом (или ином) расстоянии | ||
| + | |- | ||
| + | | [[Метод главных компонент|PCA]] || Высокая || Направления максимальной дисперсии определяются масштабом признаков | ||
| + | |- | ||
| + | | [[Нейронные сети|Нейронные сети]] || Высокая || Влияет на скорость и устойчивость сходимости градиентного спуска | ||
| + | |- | ||
| + | | [[K-means|Метод k-средних]] || Высокая || Кластеризация основана на расстояниях между объектами | ||
| + | |- | ||
| + | | [[Дерево решений|Деревья решений]] || Низкая || Разбиения строятся по пороговым значениям отдельного признака, монотонные преобразования не меняют порядок | ||
|- | |- | ||
| - | | | + | | [[Случайный лес]] || Низкая || Ансамбль деревьев, наследует их нечувствительность к масштабу |
|- | |- | ||
| - | | | + | | [[Градиентный бустинг]] || Низкая || Базовые модели — деревья решений, разбиения не зависят от абсолютного масштаба |
|- | |- | ||
| - | | | + | | [[Наивный байесовский классификатор]] || Низкая || Оценивает распределения по каждому признаку независимо |
|} | |} | ||
| - | + | Таким образом, масштабирование признаков критично для всех методов, работающих с расстояниями, скалярными произведениями или градиентной оптимизацией, и практически не влияет на модели, основанные на древовидных разбиениях. | |
| - | + | == Влияние на регуляризацию == | |
| - | + | [[Регуляризация|Регуляризация]] штрафует величину коэффициентов модели, добавляя к функции потерь L1- или L2-норму вектора весов: | |
| - | + | :: <tex>L1: \; \lambda \sum_{j=1}^{p} |w_j|, \qquad L2: \; \lambda \sum_{j=1}^{p} w_j^2</tex> | |
| - | + | Штраф применяется одинаково ко всем коэффициентам <tex>w_j</tex>, независимо от того, какому признаку они соответствуют. Если признаки измеряются в разных масштабах, коэффициенты, соответствующие признакам с малым разбросом значений, вынуждены принимать большие абсолютные значения, чтобы вносить сопоставимый вклад в предсказание, — и именно эти коэффициенты регуляризация штрафует сильнее всего, хотя содержательно признак может быть не менее важен, чем остальные. | |
| - | + | В результате без предварительной стандартизации регуляризация штрафует признаки не по их информ | |
| + | ативности, а по их исходному масштабу, что искажает как качество модели, так и интерпретацию значимости коэффициентов. По этой причине стандартизация признаков — обязательный шаг перед применением [[Гребневая регрессия|Ridge]] (L2), [[Лассо|Lasso]] (L1) и [[Эластичная сеть|Elastic Net]] регрессии. | ||
| - | + | == Сравнение методов == | |
| - | = | + | {| class="wikitable" |
| + | |- | ||
| + | ! Метод !! Формула !! Диапазон результата !! Устойчивость к выбросам !! Типичное применение | ||
| + | |- | ||
| + | | Min-max scaling || <tex>(x-x_{min})/(x_{max}-x_{min})</tex> || <tex>[0,1]</tex> (фиксированный) || Низкая || Нейросети, изображения, признаки без выбросов | ||
| + | |- | ||
| + | | Стандартизация (z-score) || <tex>(x-\mu)/\sigma</tex> || не ограничен, <tex>\mu=0,\sigma=1</tex> || Средняя || Линейные модели, SVM, PCA | ||
| + | |- | ||
| + | | Робастное масштабирование || <tex>(x-Q_2)/(Q_3-Q_1)</tex> || не ограничен || Высокая || Данные с выбросами | ||
| + | |- | ||
| + | | MaxAbsScaler || <tex>x/\max(|x|)</tex> || <tex>[-1,1]</tex> || Низкая || Разреженные данные | ||
| + | |- | ||
| + | | PowerTransformer || Бокс—Кокс / Йео—Джонсон || не ограничен, приближается к нормальному || Средняя || Скошенные распределения | ||
| + | |- | ||
| + | | QuantileTransformer || отображение по квантилям || <tex>[0,1]</tex> или нормальное || Высокая || Сильно неоднородные, многомодальные признаки | ||
| + | |} | ||
| - | + | Общий недостаток всех перечисленных методов — параметры преобразования (минимум, максимум, среднее, медиана и т. д.) должны вычисляться исключительно на обучающей выборке и затем применяться к валидационной и тестовой выборкам без пересчёта, иначе возникает утечка данных ([[Data Leakage|data leakage]]). | |
| - | + | == Пример: прогнозирование оттока клиентов == | |
| - | + | Рассмотрим упрощённую задачу [[Бинарная классификация|бинарной классификации]] — прогноз оттока клиентов телекоммуникационной компании — с помощью [[Логистическая регрессия|логистической регрессии]]. Используются два признака: количество месяцев обслуживания (tenure) и ежемесячный платёж (monthly charges, руб.). | |
| - | = | + | {| class="wikitable" |
| + | |- | ||
| + | ! Клиент !! tenure, мес. !! monthly charges, руб. !! Отток | ||
| + | |- | ||
| + | | A || 2 || 1 800 || 1 | ||
| + | |- | ||
| + | | B || 34 || 950 || 0 | ||
| + | |- | ||
| + | | C || 58 || 2 400 || 0 | ||
| + | |- | ||
| + | | D || 4 || 3 100 || 1 | ||
| + | |} | ||
| - | + | До масштабирования диапазон tenure — [2, 58], диапазон monthly charges — [950, 3100]. При обучении логистической регрессии без предобработки градиентный спуск будет крайне медленно двигаться вдоль оси tenure, а L2-регуляризация станет несоразмерно штрафовать коэффициент при tenure, поскольку для компенсации малого масштаба этот коэффициент должен быть на порядок больше коэффициента при monthly charges. | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | ||
| - | + | После стандартизации (<tex>\mu_{tenure}=24{,}5</tex>, <tex>\sigma_{tenure}\approx23{,}0</tex>; <tex>\mu_{charges}=2062{,}5</tex>, <tex>\sigma_{charges}\approx811{,}0</tex>) значения принимают вид: | |
| - | + | ||
| - | + | {| class="wikitable" | |
| - | + | |- | |
| - | * | + | ! Клиент !! tenure' !! charges' |
| - | * | + | |- |
| - | * | + | | A || -0,98 || -0,32 |
| + | |- | ||
| + | | B || 0,41 || -1,37 | ||
| + | |- | ||
| + | | C || 1,46 || 0,42 | ||
| + | |- | ||
| + | | D || -0,89 || 1,28 | ||
| + | |} | ||
| + | |||
| + | Теперь оба признака имеют сопоставимый масштаб, градиентный спуск сходится быстрее, а величина коэффициентов при регуляризации отражает реальный вклад признака в предсказание, а не его исходную единицу измерения. На практике преобразование выполняется методом <code>fit_transform</code> объекта <code>StandardScaler</code> на обучающей выборке и методом <code>transform</code> — на тестовой: | ||
| + | |||
| + | <pre> | ||
| + | from sklearn.preprocessing import StandardScaler | ||
| + | from sklearn.linear_model import LogisticRegression | ||
| + | |||
| + | scaler = StandardScaler() | ||
| + | X_train_scaled = scaler.fit_transform(X_train) | ||
| + | X_test_scaled = scaler.transform(X_test) | ||
| + | |||
| + | model = LogisticRegression() | ||
| + | model.fit(X_train_scaled, y_train) | ||
| + | </pre> | ||
| + | |||
| + | == Практические рекомендации == | ||
| + | |||
| + | * Для алгоритмов, основанных на расстояниях (KNN, k-means, SVM с ядрами), а также для PCA — использовать стандартизацию (<code>StandardScaler</code>) в качестве метода по умолчанию. | ||
| + | * Для нейронных сетей и данных с известным ограниченным диапазоном (например, пиксели изображений) — использовать min-max scaling (<code>MinMaxScaler</code>). | ||
| + | * При наличии выбросов, которые нежелательно удалять из выборки, — использовать роба | ||
| + | стное масштабирование (<code>RobustScaler</code>). | ||
| + | * Для сильно скошенных распределений (доходы, цены) перед стандартизацией целесообразно применить <code>PowerTransformer</code>, чтобы приблизить распределение к симметричному. | ||
| + | * Для разреженных матриц (например, после [[TF-IDF|TF-IDF]] векторизации) — использовать <code>MaxAbsScaler</code>, не нарушающий разреженность. | ||
| + | * Для древовидных моделей (деревья решений, случайный лес, градиентный бустинг) масштабирование, как правило, не требуется. | ||
| + | * Параметры масштабирования всегда обучаются только на обучающей выборке и затем применяются к валидационной и тестовой выборкам без повторного вычисления. | ||
| + | * Перед применением L1- или L2-регуляризации признаки необходимо стандартизировать в обязательном порядке. | ||
== См. также == | == См. также == | ||
| - | + | ||
| - | * [[ | + | * [[Ослабление и усиление шкал признаков]] |
| - | * [[ | + | * [[Предобработка данных]] |
| - | * [[ | + | * [[Регуляризация]] |
| - | * [[ | + | * [[Логистическая регрессия]] |
| - | * [[ | + | * [[Метод главных компонент]] |
== Литература == | == Литература == | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | + | * Hastie T., Tibshirani R., Friedman J. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. — 2nd ed. — Springer, 2009. | |
| - | + | * Bishop C. M. Pattern Recognition and Machine Learning. — Springer, 2006. | |
| - | [ | + | * Géron A. Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow. — 3rd ed. — O'Reilly Media, 2022. |
| - | + | * Box G. E. P., Cox D. R. An Analysis of Transformations // Journal of the Royal Statistical Society, Series B. — 1964. — Vol. 26, No. 2. — P. 211—252. | |
| + | * Yeo I.-K., Johnson R. A. A New Family of Power Transformations to Improve Normality or Symmetry // Biometrika. — 2000. — Vol. 87, No. 4. — P. 954—959. | ||
| + | * Документация scikit-learn: preprocessing — [https://scikit-learn.org/stable/modules/preprocessing.html scikit-learn.org/stable/modules/preprocessing.html] | ||
Версия 12:25, 10 июля 2026
| | Статья написана с использованием LLM Claude Sonnet 5 и проверена участником Imil Baltaniazov 15:56, 10 июля 2026 (MSD) |
Нормализация и стандартизация признаков — группа методов предобработки данных, предназначенных для приведения числовых признаков к сопоставимому масштабу. Эти преобразования не изменяют форму распределения признака по существу (за исключением специальных методов, таких как преобразование Бокса—Кокса), а лишь линейно или монотонно переносят значения в новый диапазон или к новым статистическим характеристикам.
Введение
Многие алгоритмы машинного обучения чувствительны к масштабу входных признаков. Если один признак измеряется в единицах порядка десятков тысяч, а другой — в единицах порядка нескольких единиц, алгоритмы, основанные на вычислении расстояний, скалярных произведений или градиентной оптимизации, начинают неявно придавать больший вес признаку с большим числовым разбросом — вне зависимости от его реальной информативности. Это приводит к смещённым, плохо интерпретируемым и медленно обучающимся моделям.
Нормализация и стандартизация решают эту проблему, приводя признаки к единой шкале до подачи в модель. Несмотря на то, что оба термина в бытовом употреблении нередко смешиваются, в строгом смысле они обозначают разные преобразования: нормализация переносит значения в фиксированный диапазон (чаще всего ), а стандартизация центрирует признак и приводит его дисперсию к единице. Выбор конкретного метода зависит от природы данных, наличия выбросов и используемого алгоритма.
Постановка задачи
Рассмотрим датасет с двумя признаками: возраст клиента (лет) и годовой доход (в рублях).
| Клиент | Возраст, лет | Доход, руб./год |
|---|---|---|
| 1 | 25 | 450 000 |
| 2 | 40 | 1 200 000 |
| 3 | 60 | 3 000 000 |
Возраст изменяется в диапазоне примерно 25–60 (разброс порядка десятков), доход — в диапазоне 450 000–3 000 000 (разброс порядка миллионов). Если такие данные подать, например, в метод k ближайших соседей, евклидово расстояние между объектами будет практически полностью определяться разницей в доходе — вклад возраста окажется пренебрежимо мал, хотя с содержательной точки зрения оба признака могут быть одинаково важны. Аналогичная проблема возникает при обучении линейных моделей градиентными методами: поверхность функции потерь становится сильно вытянутой вдоль направления признака с малым масштабом, что замедляет сходимость градиентного спуска.
Нормализация (min-max scaling)
Нормализация (min-max scaling) линейно переносит значения признака в заданный диапазон, обычно . Для признака
преобразование задаётся формулой:
где и
— минимальное и максимальное значения признака на обучающей выборке. Для приведения к произвольному диапазону
используется обобщённая формула:
Числовой пример. Возьмём признак «возраст» из таблицы выше: значения 25, 40, 60. Тогда ,
:
- для 25:
- для 40:
- для 60:
Когда применять. Min-max scaling полезен, когда требуется строго ограниченный диапазон значений — например, для входов нейронных сетей с сигмоидными или tanh-активациями, для алгоритмов обработки изображений (пиксели естественно ограничены), а также когда распределение признака заведомо не является нормальным и не имеет тяжёлых выбросов.
Чувствительность к выбросам. Основной недостаток метода — сильная зависимость от экстремальных значений и
. Единственный аномальный объект способен «сжать» основную массу данных в узкий поддиапазон. Например, если среди клиентов появится доход в 50 000 000 руб., все остальные значения дохода после нормализации окажутся сосредоточены вблизи нуля, потеряв различимость.
В библиотеке scikit-learn метод реализован классом MinMaxScaler.
Стандартизация (z-score)
Стандартизация (standardization, z-score normalization) центрирует признак относительно среднего и масштабирует его так, чтобы дисперсия стала равна единице. Формула преобразования:
где — выборочное среднее признака,
— выборочное стандартное отклонение:
После преобразования признак имеет нулевое среднее и единичную дисперсию: ,
. Полученные значения называют z-оценками (z-scores) — они показывают, на сколько стандартных отклонений конкретное наблюдение отстоит от среднего.
Числовой пример. Для того же признака «возраст» (25, 40, 60): ,
. Тогда:
- для 25:
- для 40:
- для 60:
Когда применять. Стандартизация — наиболее универсальный выбор для большинства алгоритмов, использующих градиентную оптимизацию (логистической регрессии, SVM, нейронных сетей), а также для методов, опирающихся на предположения о нормальном распределении данных или на разложение ковариационной матрицы, в первую очередь для метода главных компонент (PCA). В отличие от min-max scaling, стандартизация не привязана к жёсткому диапазону, поэтому она устойчивее к добавлению новых наблюдений и мягче реагирует на умеренные выбросы, хотя среднее и стандартное отклонение сами по себе также чувствительны к экстремальным значениям.
Важно подчеркнуть: стандартизация не делает распределение признака нормальным — она лишь центрирует и масштабирует его, сохраняя исходную форму распределения (асимметрию, эксцесс).
В scikit-learn метод реализован классом StandardScaler.
Робастное масштабирование
Робастное масштабирование (robust scaling) — метод, использующий устойчивые к выбросам статистики: медиану и межквартильный размах (IQR) вместо среднего и стандартного отклонения. Формула:
где — медиана (второй квартиль),
и
— первый и третий квартили, а разность
— межквартильный размах, охватывающий центральные 50% наблюдений.
Устойчивость к выбросам. Поскольку медиана и квартили являются робастными статистиками — их значение определяется порядком наблюдений, а не их абсолютной величиной, — единичные аномальные значения практически не влияют на результат преобразования. Это ключевое отличие от min-max scaling и стандартизации, где выброс напрямую входит в вычисление масштабирующих параметров (,
,
).
Пример влияния выброса. Пусть к выборке дохода (450 000, 1 200 000, 3 000 000) добавлено аномальное значение 50 000 000. При min-max scaling три «нормальных» наблюдения сожмутся в диапазон около 0–0,05. При робастном масштабировании медиана и IQR практически не изменятся, и относительное положение исходных наблюдений останется информативным.
Метод рекомендуется использовать при работе с данными, содержащими выбросы, которые нежелательно удалять (например, в финансовых или медицинских данных, где экстремальные значения могут быть содержа тельно важны).
В scikit-learn метод реализован классом RobustScaler.
Другие методы масштабирования
- MaxAbsScaler — делит значения признака на максимум по модулю:
. Результат лежит в диапазоне
, при этом сохраняется знак и разреженность данных (нулевые значения остаются нулевыми), поэтому метод удобен для разреженных матриц.
- PowerTransformer — семейство степенных преобразований (Бокса—Кокса и Йео—Джонсона), приближающих распределение признака к нормальному. Преобразование Бокса—Кокса применимо только к строго положительным значениям:
Преобразование Йео—Джонсона обобщает эту формулу на случай отрицательных и нулевых значений. Параметр подбирается по максимуму правдоподобия. Метод полезен для сильно скошенных распределений (доход, цены, время ожидания), после которых применение стандартизации даёт более симметричные признаки.
- QuantileTransformer — непараметрическое преобразование, отображающее эмпирическую функцию распределения признака на равномерное или нормальное распределение. Метод наиболее устойчив к выбросам среди перечисленных, поскольку явно «сжимает» хвосты распределения, но является нелинейным и может исказить взаимные расстояния между близкими наблюдениями.
Влияние на алгоритмы машинного обучения
Чувствительность алгоритмов к масштабу признаков определяется тем, используют ли они расстояния, скалярные произведения или величину коэффициентов в функции потерь.
| Алгоритм | Чувствительность к масштабу | Обоснование |
|---|---|---|
| Линейная регрессия, Логистическая регрессия | Высокая | Градиентная оптимизация и регуляризация зависят от масштаба коэффициентов |
| SVM | Высокая | Оптимизация зазора и ядровые функции зависят от геометрии пространства признаков |
| KNN | Высокая | Классификация напрямую основана на евклидовом (или ином) расстоянии |
| PCA | Высокая | Направления максимальной дисперсии определяются масштабом признаков |
| Нейронные сети | Высокая | Влияет на скорость и устойчивость сходимости градиентного спуска |
| Метод k-средних | Высокая | Кластеризация основана на расстояниях между объектами |
| Деревья решений | Низкая | Разбиения строятся по пороговым значениям отдельного признака, монотонные преобразования не меняют порядок |
| Случайный лес | Низкая | Ансамбль деревьев, наследует их нечувствительность к масштабу |
| Градиентный бустинг | Низкая | Базовые модели — деревья решений, разбиения не зависят от абсолютного масштаба |
| Наивный байесовский классификатор | Низкая | Оценивает распределения по каждому признаку независимо |
Таким образом, масштабирование признаков критично для всех методов, работающих с расстояниями, скалярными произведениями или градиентной оптимизацией, и практически не влияет на модели, основанные на древовидных разбиениях.
Влияние на регуляризацию
Регуляризация штрафует величину коэффициентов модели, добавляя к функции потерь L1- или L2-норму вектора весов:
Штраф применяется одинаково ко всем коэффициентам , независимо от того, какому признаку они соответствуют. Если признаки измеряются в разных масштабах, коэффициенты, соответствующие признакам с малым разбросом значений, вынуждены принимать большие абсолютные значения, чтобы вносить сопоставимый вклад в предсказание, — и именно эти коэффициенты регуляризация штрафует сильнее всего, хотя содержательно признак может быть не менее важен, чем остальные.
В результате без предварительной стандартизации регуляризация штрафует признаки не по их информ ативности, а по их исходному масштабу, что искажает как качество модели, так и интерпретацию значимости коэффициентов. По этой причине стандартизация признаков — обязательный шаг перед применением Ridge (L2), Lasso (L1) и Elastic Net регрессии.
Сравнение методов
| Метод | Формула | Диапазон результата | Устойчивость к выбросам | Типичное применение |
|---|---|---|---|---|
| Min-max scaling | | | Низкая | Нейросети, изображения, признаки без выбросов |
| Стандартизация (z-score) | | не ограничен, | Средняя | Линейные модели, SVM, PCA |
| Робастное масштабирование | | не ограничен | Высокая | Данные с выбросами |
| MaxAbsScaler | | | Низкая | Разреженные данные |
| PowerTransformer | Бокс—Кокс / Йео—Джонсон | не ограничен, приближается к нормальному | Средняя | Скошенные распределения |
| QuantileTransformer | отображение по квантилям | | Высокая | Сильно неоднородные, многомодальные признаки |
Общий недостаток всех перечисленных методов — параметры преобразования (минимум, максимум, среднее, медиана и т. д.) должны вычисляться исключительно на обучающей выборке и затем применяться к валидационной и тестовой выборкам без пересчёта, иначе возникает утечка данных (data leakage).
Пример: прогнозирование оттока клиентов
Рассмотрим упрощённую задачу бинарной классификации — прогноз оттока клиентов телекоммуникационной компании — с помощью логистической регрессии. Используются два признака: количество месяцев обслуживания (tenure) и ежемесячный платёж (monthly charges, руб.).
| Клиент | tenure, мес. | monthly charges, руб. | Отток |
|---|---|---|---|
| A | 2 | 1 800 | 1 |
| B | 34 | 950 | 0 |
| C | 58 | 2 400 | 0 |
| D | 4 | 3 100 | 1 |
До масштабирования диапазон tenure — [2, 58], диапазон monthly charges — [950, 3100]. При обучении логистической регрессии без предобработки градиентный спуск будет крайне медленно двигаться вдоль оси tenure, а L2-регуляризация станет несоразмерно штрафовать коэффициент при tenure, поскольку для компенсации малого масштаба этот коэффициент должен быть на порядок больше коэффициента при monthly charges.
После стандартизации (,
;
,
) значения принимают вид:
| Клиент | tenure' | charges' |
|---|---|---|
| A | -0,98 | -0,32 |
| B | 0,41 | -1,37 |
| C | 1,46 | 0,42 |
| D | -0,89 | 1,28 |
Теперь оба признака имеют сопоставимый масштаб, градиентный спуск сходится быстрее, а величина коэффициентов при регуляризации отражает реальный вклад признака в предсказание, а не его исходную единицу измерения. На практике преобразование выполняется методом fit_transform объекта StandardScaler на обучающей выборке и методом transform — на тестовой:
from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) model = LogisticRegression() model.fit(X_train_scaled, y_train)
Практические рекомендации
- Для алгоритмов, основанных на расстояниях (KNN, k-means, SVM с ядрами), а также для PCA — использовать стандартизацию (
StandardScaler) в качестве метода по умолчанию. - Для нейронных сетей и данных с известным ограниченным диапазоном (например, пиксели изображений) — использовать min-max scaling (
MinMaxScaler). - При наличии выбросов, которые нежелательно удалять из выборки, — использовать роба
стное масштабирование (RobustScaler).
- Для сильно скошенных распределений (доходы, цены) перед стандартизацией целесообразно применить
PowerTransformer, чтобы приблизить распределение к симметричному. - Для разреженных матриц (например, после TF-IDF векторизации) — использовать
MaxAbsScaler, не нарушающий разреженность. - Для древовидных моделей (деревья решений, случайный лес, градиентный бустинг) масштабирование, как правило, не требуется.
- Параметры масштабирования всегда обучаются только на обучающей выборке и затем применяются к валидационной и тестовой выборкам без повторного вычисления.
- Перед применением L1- или L2-регуляризации признаки необходимо стандартизировать в обязательном порядке.
См. также
- Ослабление и усиление шкал признаков
- Предобработка данных
- Регуляризация
- Логистическая регрессия
- Метод главных компонент
Литература
- Hastie T., Tibshirani R., Friedman J. The Elements of Statistical Learning: Data Mining, Inference, and Prediction. — 2nd ed. — Springer, 2009.
- Bishop C. M. Pattern Recognition and Machine Learning. — Springer, 2006.
- Géron A. Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow. — 3rd ed. — O'Reilly Media, 2022.
- Box G. E. P., Cox D. R. An Analysis of Transformations // Journal of the Royal Statistical Society, Series B. — 1964. — Vol. 26, No. 2. — P. 211—252.
- Yeo I.-K., Johnson R. A. A New Family of Power Transformations to Improve Normality or Symmetry // Biometrika. — 2000. — Vol. 87, No. 4. — P. 954—959.
- Документация scikit-learn: preprocessing — scikit-learn.org/stable/modules/preprocessing.html

