Обсуждение участника:Imil Baltaniazov

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
Строка 1: Строка 1:
-
```wikitext
+
{{well|Статья написана с использованием LLM Claude Sonnet 5 и проверена участником Imil Baltaniazov 15:56, 10 июля 2026 (MSD)}}
-
{{well|Статья написана с использованием LLM Claude Sonnet 5 и проверена участником Imil Baltaniazov 15:00, 10 июля 2026 (MSD)}}
+
-
'''Контрастивное обучение''' (''contrastive learning'') семейство методов [[Самообучение|самообучения]] (self-supervised learning), в которых модель обучается строить представления (embeddings) объектов исходя не из явных меток класса, а из отношений сходства между парами или наборами объектов. Основной принцип формулируется коротко: похожие объекты должны иметь близкие представления, непохожие — далёкие. Эта идея легла в основу современных методов предобучения в [[Компьютерное зрение|компьютерном зрении]], [[Обработка естественного языка|обработке естественного языка]] и мультимодальном обучении, включая модели типа [[CLIP]].
+
'''Нормализация и стандартизация признаков''' — группа методов [[Предобработка данных|предобработки данных]], предназначенных для приведения числовых [[Признак|признаков]] к сопоставимому масштабу. Эти преобразования не изменяют форму распределения признака по существу (за исключением специальных методов, таких как [[Преобразование Бокса-Кокса|преобразование Бокса—Кокса]]), а лишь линейно или монотонно переносят значения в новый диапазон или к новым статистическим характеристикам.
== Введение ==
== Введение ==
-
Идея обучения по парам «похоже/непохоже» восходит к работам по метрическому обучению начала 1990-х годов, где сиамские нейронные сети применялись для верификации подписей (Bromley et al., 1993). Формальный вид современного контрастивного лосса был предложен в работе Hadsell, Chopra и LeCun (2006) «Dimensionality Reduction by Learning an Invariant Mapping», где для задачи снижения размерности использовалась функция потерь, притягивающая пары точек с одинаковой меткой окрестности и отталкивающая пары с разными метками с использованием отступа (margin), аналогично более поздним триплет-лоссам.
+
Многие алгоритмы [[Машинное обучение|машинного обучения]] чувствительны к масштабу входных признаков. Если один признак измеряется в единицах порядка десятков тысяч, а другой — в единицах порядка нескольких единиц, алгоритмы, основанные на вычислении расстояний, скалярных произведений или градиентной оптимизации, начинают неявно придавать больший вес признаку с большим числовым разбросом вне зависимости от его реальной информативности. Это приводит к смещённым, плохо интерпретируемым и медленно обучающимся моделям.
-
Второй важный этап — работа ван ден Оорда и соавторов (Oord et al., 2018) «Representation Learning with Contrastive Predictive Coding», введшая функцию потерь InfoNCE и связавшая контрастивное обучение с оценкой взаимной информации между связанными фрагментами данных (например, соседними отрезками аудиосигнала). Это дало теоретическое обоснование того, почему контрастивные цели вообще позволяют извлекать полезные представления без разметки.
+
Нормализация и стандартизация решают эту проблему, приводя признаки к единой шкале до подачи в модель. Несмотря на то, что оба термина в бытовом употреблении нередко смешиваются, в строгом смысле они обозначают разные преобразования: нормализация переносит значения в фиксированный диапазон (чаще всего <tex>[0,1]</tex>), а стандартизация центрирует признак и приводит его дисперсию к единице. Выбор конкретного метода зависит от природы данных, наличия выбросов и используемого алгоритма.
-
 
+
-
Третий, решающий для практики этап — статья Chen et al. (2020) «A Simple Framework for Contrastive Learning of Visual Representations» (SimCLR), показавшая, что при достаточно сильных аугментациях, большом размере батча и добавлении небольшой проекционной головки простая контрастивная цель на изображениях позволяет получить представления, по качеству приближающиеся к представлениям, полученным при обучении с учителем на ImageNet. После этой работы контрастивное обучение стало одним из основных подходов к предобучению без разметки, породив линейку методов — MoCo, BYOL, SimSiam — и в дальнейшем — мультимодальные модели вроде CLIP.
+
== Постановка задачи ==
== Постановка задачи ==
-
Формально задача ставится так: имеется набор немаркированных данных <tex>X = \{x_1, \dots, x_N\}</tex> (изображения, тексты, графы, аудиозаписи). Требуется найти функцию-энкодер <tex>f_\theta: X \to \mathbb{R}^d</tex>, отображающую объект в вектор фиксированной размерности так, чтобы это представление было полезно для широкого круга последующих задач (downstream tasks) — классификации, кластеризации, поиска ближайших соседей, дообучения (fine-tuning).
+
Рассмотрим датасет с двумя признаками: возраст клиента (лет) и годовой доход (в рублях).
-
В отличие от обучения с учителем, где обучающий сигнал задаётся парами <tex>(x, y)</tex> с истинной меткой <tex>y</tex>, в контрастивном обучении сигнал формируется искусственно, из самой структуры данных: каждому объекту сопоставляется один или несколько «позитивных» связанных объектов (например, другая аугментация той же картинки) и множество «негативных» — не связанных с ним объектов. Обучение сводится к минимизации функции потерь, зависящей только от взаимного расположения представлений в пространстве embedding, без обращения к внешней разметке.
+
{| class="wikitable"
 +
|-
 +
! Клиент !! Возраст, лет !! Доход, руб./год
 +
|-
 +
| 1 || 25 || 450 000
 +
|-
 +
| 2 || 40 || 1 200 000
 +
|-
 +
| 3 || 60 || 3 000 000
 +
|}
-
Качество полученных представлений принято оценивать протоколом линейной оценки (linear evaluation protocol): веса энкодера замораживаются, поверх представления <tex>h = f_\theta(x)</tex> обучается только линейный классификатор с использованием размеченных данных, и измеряется точность этого классификатора. Такой протокол позволяет сравнивать разные методы предобучения независимо от архитектуры «головы» классификатора.
+
Возраст изменяется в диапазоне примерно 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>:
-
Пусть энкодер <tex>f_\theta</tex> отображает объект <tex>x</tex> в представление <tex>h = f_\theta(x)</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>
-
'''Triplet Loss.''' Функция была популяризирована в задачах метрического обучения, в частности в работе FaceNet (Schroff et al., 2015). Для тройки (якорь <tex>a</tex>, позитив <tex>p</tex>, негатив <tex>n</tex>) и функции расстояния <tex>d(u,v) = \|u - v\|_2</tex> лосс задаётся как:
+
'''Когда применять.''' Min-max scaling полезен, когда требуется строго ограниченный диапазон значений — например, для входов [[Нейронная сеть|нейронных сетей]] с сигмоидными или tanh-активациями, для алгоритмов обработки изображений (пиксели естественно ограничены), а также когда распределение признака заведомо не является нормальным и не имеет тяжёлых выбросов.
-
:: <tex>\mathcal{L}_{triplet}(a,p,n) = \max\bigl(0,\; d(f(a),f(p))^2 - d(f(a),f(n))^2 + \alpha\bigr)</tex>
+
'''Чувствительность к выбросам.''' Основной недостаток метода — сильная зависимость от экстремальных значений <tex>x_{min}</tex> и <tex>x_{max}</tex
 +
>. Единственный аномальный объект способен «сжать» основную массу данных в узкий поддиапазон. Например, если среди клиентов появится доход в 50 000 000 руб., все остальные значения дохода после нормализации окажутся сосредоточены вблизи нуля, потеряв различимость.
-
где <tex>\alpha</tex> — гиперпараметр отступа (margin). Лосс штрафует ситуацию, когда позитив не отделён от негатива хотя бы на величину <tex>\alpha</tex>; при выполнении неравенства с запасом градиент равен нулю. Существенный практический недостаток триплет-лосса — сильная зависимость от стратегии подбора триплетов (triplet mining): случайно выбранные тройки быстро становятся тривиальными (лосс равен нулю), и для эффективного обучения требуется добывать «трудные» негативы.
+
В библиотеке scikit-learn метод реализован классом <code>MinMaxScaler</code>.
-
'''InfoNCE.''' Введена в работе Oord et al. (2018) в рамках метода Contrastive Predictive Coding. В отличие от триплет-лосса, сопоставляет один позитив сразу множеству негативов через softmax:
+
== Стандартизация (z-score) ==
-
:: <tex>\mathcal{L}_{InfoNCE} = -\,\mathbb{E}\left[\log \frac{\exp\bigl(f(x)^{\top} f(x^{+})/\tau\bigr)}{\displaystyle\sum_{x_i \in \{x^+, x_1,\dots,x_{N-1}\}} \exp\bigl(f(x)^{\top} f(x_i)/\tau\bigr)}\right]</tex>
+
'''Стандартизация''' (standardization, z-score normalization) центрирует признак относительно среднего и масштабирует его так, чтобы [[Дисперсия случайной величины|дисперсия]] стала равна единице. Формула преобразования:
-
где <tex>x^+</tex> — позитивный пример, <tex>x_1,\dots,x_{N-1}</tex> — негативные примеры, <tex>\tau</tex> — параметр температуры. Авторы показали, что минимизация этого выражения эквивалентна максимизации нижней оценки взаимной информации <tex>I(x; x^+)</tex> между двумя связанными представлениями данных — отсюда название InfoNCE (information noise-contrastive estimation).
+
:: <tex>x' = \frac{x - \mu}{\sigma}</tex>
-
'''NT-Xent (SimCLR).''' В работе Chen et al. (2020) используется нормализованная температурная кросс-энтропия (normalized temperature-scaled cross entropy). Из батча размера <tex>N</tex> с помощью двух независимых случайных аугментаций формируется <tex>2N</tex> представлений; для каждой позитивной пары <tex>(i,j)</tex>, полученной из одного исходного изображения, лосс имеет вид:
+
где <tex>\mu</tex> — выборочное среднее признака, <tex>\sigma</tex> — выборочное [[Среднеквадратичное отклонение|стандартное отклонение]]:
-
:: <tex>\ell_{i,j} = -\log \frac{\exp\bigl(\mathrm{sim}(z_i,z_j)/\tau\bigr)}{\displaystyle\sum_{k=1}^{2N}\mathbb{1}_{[k\neq i]}\,\exp\bigl(\mathrm{sim}(z_i,z_k)/\tau\bigr)}</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>\mathrm{sim}(u,v) = \dfrac{u^{\top}v}{\|u\|\,\|v\|}</tex> — косинусное сходство, а <tex>z_i = g(f_\theta(x_i))</tex> — представление после проекционной головки. Итоговый лосс на батч — среднее <tex>\ell_{i,j}</tex> по всем <tex>2N</tex> позитивным парам (в обе стороны). Все остальные <tex>2N-2</tex> представления в батче выступают негативами для пары <tex>(i,j)</tex> так называемые in-batch negatives.
+
После преобразования признак имеет нулевое среднее и единичную дисперсию: <tex>E[x']=0</tex>, <tex>Var(x')=1</tex>. Полученные значения называют '''z-оценками''' (z-scores) — они показывают, на сколько стандартных отклонений конкретное наблюдение отстоит от среднего.
-
Температура <tex>\tau</tex> играет роль настройки «жёсткости» распределения softmax: малые значения <tex>\tau</tex> сильнее штрафуют близкие негативы (эффект, близкий к hard negative mining), но одновременно делают обучение более чувствительным к шуму и переобучению на конкретных негативах внутри батча.
+
'''Числовой пример.''' Для того же признака «возраст» (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>
-
'''Сиамские сети''' (Siamese networks) базовая архитектурная схема контрастивного обучения: два (или более) прохода одного и того же энкодера с общими весами <tex>f_\theta</tex> применяются к разным входам (например, к двум аугментациям одного изображения), после чего представления сравниваются функцией расстояния или сходства. Название закрепилось за архитектурой ещё в работах по верификации подписей и лиц 1990–2000-х годов.
+
'''Когда применять.''' Стандартизация наиболее универсальный выбор для большинства алгоритмов, использующих градиентную оптимизацию ([[Логистическая регрессия|логистической регрессии]], [[Метод опорных векторов|SVM]], нейронных сетей), а также для методов, опирающихся на предположения о нормальном распределении данных или на разложение [[Ковариационная матрица|ковариационной матрицы]], в первую очередь для [[Метод главных компонент|метода главных компонент]] (PCA). В отличие от min-max scaling, стандартизация не привязана к жёсткому диапазону, поэтому она устойчивее к добавлению новых наблюдений и мягче реагирует на умеренные выбросы, хотя среднее и стандартное отклонение сами по себе также чувствительны к экстремальным значениям.
-
'''Проекционная головка.''' Ключевое наблюдение SimCLR состоит в том, что контрастивный лосс лучше вычислять не непосредственно на представлении <tex>h = f_\theta(x)</tex>, которое затем используется в последующих задачах, а на выходе дополнительной небольшой сети проекционной головки <tex>g(\cdot)</tex>, обычно двухслойного MLP с нелинейностью ReLU: <tex>z = g(h)</tex>. После предобучения головка <tex>g</tex> отбрасывается, для последующих задач используется <tex>h</tex>. Объяснение эффекта: контрастивная цель заставляет модель отбрасывать информацию, инвариантную относительно применённых аугментаций (например, цвет объекта, если применялось цветовое искажение) — такая информация может быть полезна для последующих задач, но вредна для контрастивной цели. Проекционная головка «принимает удар на себя», сохраняя более общее представление в <tex>h</tex>.
+
Важно подчеркнуть: стандартизация не делает распределение признака нормальным она лишь центрирует и масштабирует его, сохраняя исходную форму распределения (асимметрию, эксцесс).
-
'''Симметричные и асимметричные архитектуры.''' В симметричной схеме (SimCLR) оба входа проходят через один и тот же энкодер с общими весами, и градиент течёт по обеим ветвям одинаково. В асимметричных схемах ветви различаются: например, в MoCo один энкодер (query encoder) обучается градиентным спуском, а второй (key encoder) обновляется через экспоненциальное скользящее среднее (momentum, EMA) весов первого энкодера и не получает градиента напрямую — это стабилизирует представления негативов, накапливаемых в очереди. В BYOL и SimSiam асимметрия усиливается ещё сильнее: на «онлайн»-ветви добавляется дополнительная сеть-предиктор, а на «целевой» ветви применяется остановка градиента (stop-gradient) — при этом негативные примеры вовсе не требуются.
+
В scikit-learn метод реализован классом <code>StandardScaler</code>.
-
== Стратегии аугментации данных ==
+
== Робастное масштабирование ==
-
Выбор аугментаций определяет, какие инварианты выучит модель, и является одним из решающих факторов качества контрастивного обучения.
+
'''Робастное масштабирование''' (robust scaling) — метод, использующий устойчивые к выбросам статистики: [[Медиана|медиану]] и [[Интерквартильный размах|межквартильный размах]] (IQR) вместо среднего и стандартного отклонения. Формула:
-
'''Изображения.''' В экспериментах SimCLR показано, что сильнее всего на качество влияет комбинация случайного кропа с масштабированием (random resized crop) и цветовых искажений (color jitter, случайное преобразование яркости, контраста, насыщенности и оттенка). По отдельности ни один из этих видов аугментации не даёт сравнимого эффекта: случайный кроп без изменения цвета позволяет модели решать задачу по одним лишь статистикам цвета, не выучивая содержательных признаков формы и текстуры. Дополнительно применяются размытие по Гауссу, перевод в оттенки серого, горизонтальное отражение; в ряде более поздних методов (BYOL) добавляется соляризация.
+
:: <tex>x' = \frac{x - Q_2}{Q_3 - Q_1}</tex>
-
'''Текст.''' Используются маскирование токенов, обратный перевод (back-translation), синонимическая замена слов, случайные удаление/вставка/перестановка слов (техника EDA), а также кроппинг фрагментов документа. Отдельный интересный приём метод SimCSE, где две «разные» версии одного и того же предложения получаются простым повторным пропуском через энкодер с включённым dropout: разные случайные маски dropout дают немного разные представления одного и того же текста, которые и образуют позитивную пару.
+
где <tex>Q_2</tex> — медиана (второй квартиль), <tex>Q_1</tex> и <tex>Q_3</tex> — первый и третий квартили, а разность <tex>Q_3 - Q_1 = IQR</tex> межквартильный размах, охватывающий центральные 50% наблюдений.
-
'''Графы.''' В графовом контрастивном обучении (например, GraphCL) применяются случайное удаление рёбер и узлов, маскирование атрибутов узлов, сэмплирование подграфов и аугментации на основе диффузии графа или случайных блужданий каждая операция должна сохранять содержательную структуру графа, не разрушая его смысловую связность.
+
'''Устойчивость к выбросам.''' Поскольку медиана и квартили являются робастными статистиками — их значение определяется порядком наблюдений, а не их абсолютной величиной, — единичные аномальные значения практически не влияют на результат преобразования. Это ключевое отличие от min-max scaling и стандартизации, где выброс напрямую входит в вычисление масштабирующих параметров (<tex>x_{max}</tex>, <tex>\mu</tex>, <tex>\sigma</tex>).
-
Общий принцип: аугментация должна быть достаточно сильной, чтобы задача не решалась тривиальными «короткими путями» (shortcuts), но не настолько сильной, чтобы разрушить семантику, важную для последующих задач. Подбор набора аугментаций — во многом эмпирическая, специфичная для модальности процедура.
+
'''Пример влияния выброса.''' Пусть к выборке дохода (450 000, 1 200 000, 3 000 000) добавлено аномальное значение 50 000 000. При min-max scaling три «нормальных» наблюдения сожмутся в диапазон около 0–0,05. При робастном масштабировании медиана и IQR практически не изменятся, и относительное положение исходных наблюдений останется информативным.
-
== Проблема коллапса представлений ==
+
Метод рекомендуется использовать при работе с данными, содержащими выбросы, которые нежелательно удалять (например, в финансовых или медицинских данных, где экстремальные значения могут быть содержа
 +
тельно важны).
-
'''Коллапс представлений''' (representation collapse) — вырожденное решение, при котором энкодер отображает все входы в одну и ту же (или почти одну и ту же) точку пространства представлений. При таком решении расстояние между любыми позитивными парами тривиально минимально, однако представление не несёт никакой информации об исходных данных и бесполезно для последующих задач. Проблема возникает потому, что цель «сблизить позитивы» сама по себе не имеет механизма, препятствующего вырождению — константное отображение формально идеально решает эту часть задачи.
+
В scikit-learn метод реализован классом <code>RobustScaler</code>.
-
Основные способы борьбы с коллапсом:
+
== Другие методы масштабирования ==
-
* '''Явные негативные примеры.''' В InfoNCE-подобных лоссах наличие негативов создаёт отталкивающую силу: минимизация лосса требует не просто сближения позитива, а его отличимости от множества негативов через softmax, что делает константное решение невыгодным. Для устойчивой оценки такого softmax требуется достаточно большое число негативов — отсюда потребность SimCLR в больших батчах либо MoCo в очереди (queue) накопленных представлений.
+
* '''MaxAbsScaler''' — делит значения признака на максимум по модулю: <tex>x' = x / \max(|x|)</tex>. Результат лежит в диапазоне <tex>[-1, 1]</tex>, при этом сохраняется знак и разреженность данных (нулевые значения остаются нулевыми), поэтому метод удобен для разреженных матриц.
-
* '''Остановка градиента (stop-gradient).''' В BYOL и особенно наглядно в SimSiam показано, что коллапса можно избежать вовсе без негативных примеров: достаточно асимметрии между двумя ветвями сети (дополнительный предиктор на одной ветви) и остановки градиента на другой ветви. Полного теоретического объяснения этому явлению до конца не дано, но эмпирически и по ряду теоретических аргументов (аналогия с EM-алгоритмом попеременной оптимизации) показано, что такая схема устойчиво избегает вырождения.
+
* '''PowerTransformer''' — семейство степенных преобразований (Бокса—Кокса и Йео—Джонсона), приближающих распределение признака к нормальному. Преобразование Бокса—Кокса применимо только к строго положительным значениям:
-
* '''Нормализация.''' L2-нормализация представлений (проекция на единичную гиперсферу) в сочетании с батч-нормализацией внутри проекционной головки и предиктора эмпирически связана со стабильностью обучения и, по ряду наблюдений, помогает избегать коллапса — хотя более поздние работы (в частности, эксперименты SimSiam) показывают, что одной нормализации без stop-gradient недостаточно.
+
:: <tex>x^{(\lambda)} = \begin{cases} \dfrac{x^\lambda - 1}{\lambda}, & \lambda \neq 0 \\ \ln(x), & \lambda = 0 \end{cases}</tex>
-
* '''Явная регуляризация ковариации.''' Отдельное направление — методы Barlow Twins (Zbontar et al., 2021) и VICReg (Bardes et al., 2022), которые вместо контрастивного или предикторного лосса напрямую штрафуют вырождение: требуют, чтобы дисперсия каждой компоненты представления по батчу была не ниже порога, и одновременно минимизируют корреляцию между разными компонентами вектора представления.
+
Преобразование Йео—Джонсона обобщает эту формулу на случай отрицательных и нулевых значений. Параметр <tex>\lambda</tex> подбирается по максимуму правдоподобия. Метод полезен для сильно скошенных распределений (доход, цены, время ожидания), после которых применение стандартизации даёт более симметричные признаки.
-
== Основные методы ==
+
* '''QuantileTransformer''' — непараметрическое преобразование, отображающее эмпирическую функцию распределения признака на равномерное или нормальное распределение. Метод наиболее устойчив к выбросам среди перечисленных, поскольку явно «сжимает» хвосты распределения, но является нелинейным и может исказить взаимные расстояния между близкими наблюдениями.
 +
 
 +
== Влияние на алгоритмы машинного обучения ==
 +
 
 +
Чувствительность алгоритмов к масштабу признаков определяется тем, используют ли они расстояния, скалярные произведения или величину коэффициентов в функции потерь.
{| class="wikitable"
{| class="wikitable"
-
! Метод !! Год !! Нужны негативные примеры !! Momentum-энкодер !! Механизм против коллапса !! Требования к батчу
 
|-
|-
-
| SimCLR || 2020 || Да (in-batch) || Нет || Негативные примеры + проекционная головка || Очень большой (2048–8192)
+
! Алгоритм !! Чувствительность к масштабу !! Обоснование
 +
|-
 +
| [[Линейная регрессия]], [[Логистическая регрессия]] || Высокая || Градиентная оптимизация и регуляризация зависят от масштаба коэффициентов
 +
|-
 +
| [[Метод опорных векторов|SVM]] || Высокая || Оптимизация зазора и ядровые функции зависят от геометрии пространства признаков
 +
|-
 +
| [[Метод k ближайших соседей|KNN]] || Высокая || Классификация напрямую основана на евклидовом (или ином) расстоянии
 +
|-
 +
| [[Метод главных компонент|PCA]] || Высокая || Направления максимальной дисперсии определяются масштабом признаков
 +
|-
 +
| [[Нейронные сети|Нейронные сети]] || Высокая || Влияет на скорость и устойчивость сходимости градиентного спуска
 +
|-
 +
| [[K-means|Метод k-средних]] || Высокая || Кластеризация основана на расстояниях между объектами
 +
|-
 +
| [[Дерево решений|Деревья решений]] || Низкая || Разбиения строятся по пороговым значениям отдельного признака, монотонные преобразования не меняют порядок
|-
|-
-
| MoCo (v1/v2) || 2019/2020 || Да (очередь) || Да || Негативные примеры из очереди + momentum-энкодер || Умеренный (очередь заменяет большой батч)
+
| [[Случайный лес]] || Низкая || Ансамбль деревьев, наследует их нечувствительность к масштабу
|-
|-
-
| BYOL || 2020 || Нет || Да || Асимметрия «онлайн/цель» + предиктор + stop-gradient || Умеренный
+
| [[Градиентный бустинг]] || Низкая || Базовые модели — деревья решений, разбиения не зависят от абсолютного масштаба
|-
|-
-
| SimSiam || 2021 || Нет || Нет || Только предиктор + stop-gradient || Умеренный
+
| [[Наивный байесовский классификатор]] || Низкая || Оценивает распределения по каждому признаку независимо
|}
|}
-
'''SimCLR''' (Chen et al., 2020) — симметричная сиамская схема с общей энкодер-проекцией на обеих ветвях, использующая NT-Xent-лосс с in-batch негативами; для достижения качественных представлений требует очень больших батчей, поскольку число негативов ограничено размером батча.
+
Таким образом, масштабирование признаков критично для всех методов, работающих с расстояниями, скалярными произведениями или градиентной оптимизацией, и практически не влияет на модели, основанные на древовидных разбиениях.
-
'''MoCo''' (He et al., 2019; версия v2 — Chen et al., 2020) решает проблему больших батчей за счёт отдельной очереди (dictionary) представлений-негативов, накапливаемых из предыдущих итераций, и momentum-энкодера — ключевой сети, чьи веса не обучаются градиентом напрямую, а обновляются как экспоненциальное скользящее среднее весов основной (query) сети. Это позволяет держать большое число негативов (десятки тысяч) при умеренном размере батча.
+
== Влияние на регуляризацию ==
-
'''BYOL''' («Bootstrap Your Own Latent», Grill et al., 2020) полностью отказывается от негативных примеров: онлайн-сеть с дополнительным предиктором обучается предсказывать представление, выдаваемое целевой (target) сетью — копией с momentum-обновлением весов и остановленным градиентом — на другой аугментации того же изображения. Лосс — по существу регрессионный (нормализованная среднеквадратичная ошибка), а не классификационный.
+
[[Регуляризация|Регуляризация]] штрафует величину коэффициентов модели, добавляя к функции потерь L1- или L2-норму вектора весов:
-
'''SimSiam''' (Chen & He, 2021) показывает, что для избежания коллапса momentum-энкодер не обязателен: достаточно простой сиамской сети с общими весами, предиктора на одной ветви и остановки градиента на другой — без негативов, без очереди, без momentum-обновления.
+
:: <tex>L1: \; \lambda \sum_{j=1}^{p} |w_j|, \qquad L2: \; \lambda \sum_{j=1}^{p} w_j^2</tex>
-
== Связь с CLIP и мультимодальными моделями ==
+
Штраф применяется одинаково ко всем коэффициентам <tex>w_j</tex>, независимо от того, какому признаку они соответствуют. Если признаки измеряются в разных масштабах, коэффициенты, соответствующие признакам с малым разбросом значений, вынуждены принимать большие абсолютные значения, чтобы вносить сопоставимый вклад в предсказание, — и именно эти коэффициенты регуляризация штрафует сильнее всего, хотя содержательно признак может быть не менее важен, чем остальные.
-
Контрастивный принцип естественно обобщается на пары объектов разной модальности. Модель [[CLIP]] (Radford et al., 2021, «Learning Transferable Visual Models From Natural Language Supervision») обучает одновременно энкодер изображений и энкодер текста на большом корпусе пар (изображение, подпись), используя, по существу, ту же схему, что и NT-Xent: внутри батча позитивной парой считается соответствующая друг другу пара «изображение — подпись», негативами — все остальные комбинации изображений и подписей внутри батча; лосс вычисляется симметрично — как по строкам, так и по столбцам матрицы косинусных сходств.
+
В результате без предварительной стандартизации регуляризация штрафует признаки не по их информ
 +
ативности, а по их исходному масштабу, что искажает как качество модели, так и интерпретацию значимости коэффициентов. По этой причине стандартизация признаков — обязательный шаг перед применением [[Гребневая регрессия|Ridge]] (L2), [[Лассо|Lasso]] (L1) и [[Эластичная сеть|Elastic Net]] регрессии.
-
Результат такого предобучения — общее пространство представлений, в котором изображение и описывающий его текст оказываются близки. Это позволяет решать задачи zero-shot классификации: класс объекта определяется путём сравнения представления изображения с представлениями текстовых промптов вида «фотография {класс}» без какого-либо дообучения на целевом наборе данных. Подход CLIP послужил основой для последующих мультимодальных контрастивных моделей (например, ALIGN) и широко используется как источник эмбеддингов для задач мультимодального поиска и в качестве управляющего сигнала в генеративных моделях изображений.
+
== Сравнение методов ==
-
== Пример: обучение представлений на CIFAR-10 с SimCLR ==
+
{| 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> или нормальное || Высокая || Сильно неоднородные, многомодальные признаки
 +
|}
-
Проиллюстрируем типичный пайплайн на примере CIFAR-10 (условные, ориентировочные цифры). В качестве энкодера берётся сеть уменьшенной глубины (например, ResNet-18, адаптированный под разрешение 32×32). Предобучение проводится без меток в течение порядка 200–500 эпох с батчем размера 256–512 (небольшое разрешение CIFAR-10 позволяет обойтись без экстремально больших батчей, характерных для ImageNet), с аугментациями: случайный кроп с изменением масштаба, горизонтальное отражение, цветовые искажения, перевод в оттенки серого. Используется проекционная головка — двухслойный MLP, лосс — NT-Xent с температурой порядка 0.5.
+
Общий недостаток всех перечисленных методов — параметры преобразования (минимум, максимум, среднее, медиана и т. д.) должны вычисляться исключительно на обучающей выборке и затем применяться к валидационной и тестовой выборкам без пересчёта, иначе возникает утечка данных ([[Data Leakage|data leakage]]).
-
После предобучения энкодер замораживается, поверх представления <tex>h</tex> обучается линейный классификатор на полном размеченном наборе CIFAR-10. Ориентировочно такой протокол позволяет получить точность в районе 90% и выше, при том что полностью контролируемое обучение сравнимой по размеру сети на CIFAR-10 обычно даёт порядка 93–95% — то есть контрастивное предобучение без единой метки позволяет приблизиться к качеству обучения с учителем.
+
== Пример: прогнозирование оттока клиентов ==
-
На практике реализовывать подобный пайплайн с нуля не обязательно: библиотека PyTorch Lightning (в частности, надстройки вроде Lightning Bolts и сторонняя библиотека lightly) предоставляет готовые реализации SimCLR, MoCo, BYOL и SimSiam с настраиваемыми аугментациями и логированием; экосистема Hugging Face предоставляет предобученные контрастивные модели (в частности, чекпоинты CLIP) и библиотеку sentence-transformers для текстовых представлений, обучаемых по контрастивным и близким к ним схемам.
+
Рассмотрим упрощённую задачу [[Бинарная классификация|бинарной классификации]] — прогноз оттока клиентов телекоммуникационной компании — с помощью [[Логистическая регрессия|логистической регрессии]]. Используются два признака: количество месяцев обслуживания (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>) значения принимают вид:
-
* сильная чувствительность к выбору и силе аугментаций: неудачный набор либо тривиализирует задачу, либо разрушает полезную семантику;
+
 
-
* методам с явными негативами (SimCLR, MoCo) требуются большие батчи или банки памяти, что увеличивает вычислительные затраты;
+
{| class="wikitable"
-
* риск коллапса представлений, требующий дополнительных архитектурных приёмов (stop-gradient, momentum-энкодер, регуляризация ковариации);
+
|-
-
* нет формальной гарантии, что инварианты, навязанные аугментациями, совпадают с инвариантами, нужными для конкретной целевой задачи;
+
! Клиент !! 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-регуляризации признаки необходимо стандартизировать в обязательном порядке.
== См. также ==
== См. также ==
-
* [[Самообучение]]
+
 
-
* [[Компьютерное зрение]]
+
* [[Ослабление и усиление шкал признаков]]
-
* [[Обработка естественного языка]]
+
* [[Предобработка данных]]
-
* [[CLIP]]
+
* [[Регуляризация]]
-
* [[SimCLR]]
+
* [[Логистическая регрессия]]
-
* [[MoCo]]
+
* [[Метод главных компонент]]
== Литература ==
== Литература ==
-
# Hadsell R., Chopra S., LeCun Y. Dimensionality Reduction by Learning an Invariant Mapping // CVPR. — 2006.
 
-
# Oord A. van den, Li Y., Vinyals O. Representation Learning with Contrastive Predictive Coding // arXiv:1807.03748. — 2018.
 
-
# Chen T., Kornblith S., Norouzi M., Hinton G. A Simple Framework for Contrastive Learning of Visual Representations // ICML. — 2020.
 
-
# He K., Fan H., Wu Y., Xie S., Girshick R. Momentum Contrast for Unsupervised Visual Representation Learning // CVPR. — 2020.
 
-
# Grill J.-B., Strub F., Altché F. et al. Bootstrap Your Own Latent: A New Approach to Self-Supervised Learning // NeurIPS. — 2020.
 
-
# Chen X., He K. Exploring Simple Siamese Representation Learning // CVPR. — 2021.
 
-
# Radford A., Kim J.W., Hallacy C. et al. Learning Transferable Visual Models From Natural Language Supervision // ICML. — 2021.
 
-
# Schroff F., Kalenichenko D., Philbin J. FaceNet: A Unified Embedding for Face Recognition and Clustering // CVPR. — 2015.
 
-
# Wu Z., Xiong Y., Yu S.X., Lin D. Unsupervised Feature Learning via Non-Parametric Instance Discrimination // CVPR. — 2018.
 
-
# Zbontar J., Jing L., Misra I., LeCun Y., Deny S. Barlow Twins: Self-Supervised Learning via Redundancy Reduction // ICML. — 2021.
 
-
[[Категория:Машинное обучение]]
+
* 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)


Нормализация и стандартизация признаков — группа методов предобработки данных, предназначенных для приведения числовых признаков к сопоставимому масштабу. Эти преобразования не изменяют форму распределения признака по существу (за исключением специальных методов, таких как преобразование Бокса—Кокса), а лишь линейно или монотонно переносят значения в новый диапазон или к новым статистическим характеристикам.

Содержание

Введение

Многие алгоритмы машинного обучения чувствительны к масштабу входных признаков. Если один признак измеряется в единицах порядка десятков тысяч, а другой — в единицах порядка нескольких единиц, алгоритмы, основанные на вычислении расстояний, скалярных произведений или градиентной оптимизации, начинают неявно придавать больший вес признаку с большим числовым разбросом — вне зависимости от его реальной информативности. Это приводит к смещённым, плохо интерпретируемым и медленно обучающимся моделям.

Нормализация и стандартизация решают эту проблему, приводя признаки к единой шкале до подачи в модель. Несмотря на то, что оба термина в бытовом употреблении нередко смешиваются, в строгом смысле они обозначают разные преобразования: нормализация переносит значения в фиксированный диапазон (чаще всего [0,1]), а стандартизация центрирует признак и приводит его дисперсию к единице. Выбор конкретного метода зависит от природы данных, наличия выбросов и используемого алгоритма.

Постановка задачи

Рассмотрим датасет с двумя признаками: возраст клиента (лет) и годовой доход (в рублях).

Клиент Возраст, лет Доход, руб./год
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) линейно переносит значения признака в заданный диапазон, обычно [0,1]. Для признака x преобразование задаётся формулой:

x' = \frac{x - x_{min}}{x_{max} - x_{min}}

где x_{min} и x_{max} — минимальное и максимальное значения признака на обучающей выборке. Для приведения к произвольному диапазону [a, b] используется обобщённая формула:

x' = a + \frac{(x - x_{min})(b - a)}{x_{max} - x_{min}}

Числовой пример. Возьмём признак «возраст» из таблицы выше: значения 25, 40, 60. Тогда x_{min}=25, x_{max}=60:

  • для 25: x' = (25-25)/(60-25) = 0{,}00
  • для 40: x' = (40-25)/(60-25) = 0{,}43
  • для 60: x' = (60-25)/(60-25) = 1{,}00

Когда применять. Min-max scaling полезен, когда требуется строго ограниченный диапазон значений — например, для входов нейронных сетей с сигмоидными или tanh-активациями, для алгоритмов обработки изображений (пиксели естественно ограничены), а также когда распределение признака заведомо не является нормальным и не имеет тяжёлых выбросов.

Чувствительность к выбросам. Основной недостаток метода — сильная зависимость от экстремальных значений x_{min} и x_{max}. Единственный аномальный объект способен «сжать» основную массу данных в узкий поддиапазон. Например, если среди клиентов появится доход в 50 000 000 руб., все остальные значения дохода после нормализации окажутся сосредоточены вблизи нуля, потеряв различимость.

В библиотеке scikit-learn метод реализован классом MinMaxScaler.

Стандартизация (z-score)

Стандартизация (standardization, z-score normalization) центрирует признак относительно среднего и масштабирует его так, чтобы дисперсия стала равна единице. Формула преобразования:

x' = \frac{x - \mu}{\sigma}

где \mu — выборочное среднее признака, \sigma — выборочное стандартное отклонение:

\mu = \frac{1}{n}\sum_{i=1}^{n} x_i, \qquad \sigma = \sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_i - \mu)^2}

После преобразования признак имеет нулевое среднее и единичную дисперсию: E[x']=0, Var(x')=1. Полученные значения называют z-оценками (z-scores) — они показывают, на сколько стандартных отклонений конкретное наблюдение отстоит от среднего.

Числовой пример. Для того же признака «возраст» (25, 40, 60): \mu = 41{,}67, \sigma \approx 14{,}36. Тогда:

  • для 25: x' = (25-41{,}67)/14{,}36 \approx -1{,}16
  • для 40: x' = (40-41{,}67)/14{,}36 \approx -0{,}12
  • для 60: x' = (60-41{,}67)/14{,}36 \approx 1{,}28

Когда применять. Стандартизация — наиболее универсальный выбор для большинства алгоритмов, использующих градиентную оптимизацию (логистической регрессии, SVM, нейронных сетей), а также для методов, опирающихся на предположения о нормальном распределении данных или на разложение ковариационной матрицы, в первую очередь для метода главных компонент (PCA). В отличие от min-max scaling, стандартизация не привязана к жёсткому диапазону, поэтому она устойчивее к добавлению новых наблюдений и мягче реагирует на умеренные выбросы, хотя среднее и стандартное отклонение сами по себе также чувствительны к экстремальным значениям.

Важно подчеркнуть: стандартизация не делает распределение признака нормальным — она лишь центрирует и масштабирует его, сохраняя исходную форму распределения (асимметрию, эксцесс).

В scikit-learn метод реализован классом StandardScaler.

Робастное масштабирование

Робастное масштабирование (robust scaling) — метод, использующий устойчивые к выбросам статистики: медиану и межквартильный размах (IQR) вместо среднего и стандартного отклонения. Формула:

x' = \frac{x - Q_2}{Q_3 - Q_1}

где Q_2 — медиана (второй квартиль), Q_1 и Q_3 — первый и третий квартили, а разность Q_3 - Q_1 = IQR — межквартильный размах, охватывающий центральные 50% наблюдений.

Устойчивость к выбросам. Поскольку медиана и квартили являются робастными статистиками — их значение определяется порядком наблюдений, а не их абсолютной величиной, — единичные аномальные значения практически не влияют на результат преобразования. Это ключевое отличие от min-max scaling и стандартизации, где выброс напрямую входит в вычисление масштабирующих параметров (x_{max}, \mu, \sigma).

Пример влияния выброса. Пусть к выборке дохода (450 000, 1 200 000, 3 000 000) добавлено аномальное значение 50 000 000. При min-max scaling три «нормальных» наблюдения сожмутся в диапазон около 0–0,05. При робастном масштабировании медиана и IQR практически не изменятся, и относительное положение исходных наблюдений останется информативным.

Метод рекомендуется использовать при работе с данными, содержащими выбросы, которые нежелательно удалять (например, в финансовых или медицинских данных, где экстремальные значения могут быть содержа тельно важны).

В scikit-learn метод реализован классом RobustScaler.

Другие методы масштабирования

  • MaxAbsScaler — делит значения признака на максимум по модулю: x' = x / \max(|x|). Результат лежит в диапазоне [-1, 1], при этом сохраняется знак и разреженность данных (нулевые значения остаются нулевыми), поэтому метод удобен для разреженных матриц.
  • PowerTransformer — семейство степенных преобразований (Бокса—Кокса и Йео—Джонсона), приближающих распределение признака к нормальному. Преобразование Бокса—Кокса применимо только к строго положительным значениям:
x^{(\lambda)} = \begin{cases} \dfrac{x^\lambda - 1}{\lambda}, & \lambda \neq 0 \\ \ln(x), & \lambda = 0 \end{cases}

Преобразование Йео—Джонсона обобщает эту формулу на случай отрицательных и нулевых значений. Параметр \lambda подбирается по максимуму правдоподобия. Метод полезен для сильно скошенных распределений (доход, цены, время ожидания), после которых применение стандартизации даёт более симметричные признаки.

  • QuantileTransformer — непараметрическое преобразование, отображающее эмпирическую функцию распределения признака на равномерное или нормальное распределение. Метод наиболее устойчив к выбросам среди перечисленных, поскольку явно «сжимает» хвосты распределения, но является нелинейным и может исказить взаимные расстояния между близкими наблюдениями.

Влияние на алгоритмы машинного обучения

Чувствительность алгоритмов к масштабу признаков определяется тем, используют ли они расстояния, скалярные произведения или величину коэффициентов в функции потерь.

Алгоритм Чувствительность к масштабу Обоснование
Линейная регрессия, Логистическая регрессия Высокая Градиентная оптимизация и регуляризация зависят от масштаба коэффициентов
SVM Высокая Оптимизация зазора и ядровые функции зависят от геометрии пространства признаков
KNN Высокая Классификация напрямую основана на евклидовом (или ином) расстоянии
PCA Высокая Направления максимальной дисперсии определяются масштабом признаков
Нейронные сети Высокая Влияет на скорость и устойчивость сходимости градиентного спуска
Метод k-средних Высокая Кластеризация основана на расстояниях между объектами
Деревья решений Низкая Разбиения строятся по пороговым значениям отдельного признака, монотонные преобразования не меняют порядок
Случайный лес Низкая Ансамбль деревьев, наследует их нечувствительность к масштабу
Градиентный бустинг Низкая Базовые модели — деревья решений, разбиения не зависят от абсолютного масштаба
Наивный байесовский классификатор Низкая Оценивает распределения по каждому признаку независимо

Таким образом, масштабирование признаков критично для всех методов, работающих с расстояниями, скалярными произведениями или градиентной оптимизацией, и практически не влияет на модели, основанные на древовидных разбиениях.

Влияние на регуляризацию

Регуляризация штрафует величину коэффициентов модели, добавляя к функции потерь L1- или L2-норму вектора весов:

L1: \; \lambda \sum_{j=1}^{p} |w_j|, \qquad L2: \; \lambda \sum_{j=1}^{p} w_j^2

Штраф применяется одинаково ко всем коэффициентам w_j, независимо от того, какому признаку они соответствуют. Если признаки измеряются в разных масштабах, коэффициенты, соответствующие признакам с малым разбросом значений, вынуждены принимать большие абсолютные значения, чтобы вносить сопоставимый вклад в предсказание, — и именно эти коэффициенты регуляризация штрафует сильнее всего, хотя содержательно признак может быть не менее важен, чем остальные.

В результате без предварительной стандартизации регуляризация штрафует признаки не по их информ ативности, а по их исходному масштабу, что искажает как качество модели, так и интерпретацию значимости коэффициентов. По этой причине стандартизация признаков — обязательный шаг перед применением Ridge (L2), Lasso (L1) и Elastic Net регрессии.

Сравнение методов

Метод Формула Диапазон результата Устойчивость к выбросам Типичное применение
Min-max scaling (x-x_{min})/(x_{max}-x_{min}) [0,1] (фиксированный) Низкая Нейросети, изображения, признаки без выбросов
Стандартизация (z-score) (x-\mu)/\sigma не ограничен, \mu=0,\sigma=1 Средняя Линейные модели, SVM, PCA
Робастное масштабирование (x-Q_2)/(Q_3-Q_1) не ограничен Высокая Данные с выбросами
MaxAbsScaler x/\max(|x|) [-1,1] Низкая Разреженные данные
PowerTransformer Бокс—Кокс / Йео—Джонсон не ограничен, приближается к нормальному Средняя Скошенные распределения
QuantileTransformer отображение по квантилям [0,1] или нормальное Высокая Сильно неоднородные, многомодальные признаки

Общий недостаток всех перечисленных методов — параметры преобразования (минимум, максимум, среднее, медиана и т. д.) должны вычисляться исключительно на обучающей выборке и затем применяться к валидационной и тестовой выборкам без пересчёта, иначе возникает утечка данных (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.

После стандартизации (\mu_{tenure}=24{,}5, \sigma_{tenure}\approx23{,}0; \mu_{charges}=2062{,}5, \sigma_{charges}\approx811{,}0) значения принимают вид:

Клиент 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