Стандартизация или нормализация?

Всякий раз, когда кто-то входит в прекрасный мир науки о данных, он сталкивается с множеством новых терминов, которые могут быть очень пугающими для новичков, как и все остальные. Я также сталкивался с этой проблемой (не волнуйтесь, со временем становится легче ), и поэтому я решил помочь своим однокурсникам облегчить этот переход.

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

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

С любым набором данных связана некоторая статистика (статистика — это просто переменная, которую можно использовать для описания общих свойств распределения). Двумя наиболее часто используемыми статистическими данными являются

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

Распределение Гаусса — это очень интересное распределение данных, которое часто встречается в природе, особая форма — это стандартное нормальное распределение, где среднее значение равно 0, а стандартное отклонение равно 1.

Мы можем рассчитать стандартизированное значение любой переменной X следующим образом:

где μ означает среднее значение наших данных, а σ означает стандартное отклонение наших данных.

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

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

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

Теперь я надеюсь, что это дало вам четкое представление о том, «Зачем стандартизировать данные», давайте перейдем к тому, как это сделать.

Итак, мы используем нашу любимую библиотеку scikit-learn. Он содержит класс StandardScaler в модуле sklearn.preprocessing. Чтобы использовать его, мы сначала импортируем библиотеку, создаем объект класса, вызываем метод fit и…. вот и все! Были сделаны. Покажу на примере —

Первый столбец — это возраст нашего клиента, а второй столбец — это зарплата для данного набора данных, который я взял из этого курса.

Здесь обратите внимание на одну важную деталь: наши значения X_standard не лежат строго между 0 и 1, скорее они лежат где-то между -3 и +3, но это несложно. и быстрое правило.

Теперь, когда мы знаем, почему и как это делать, остается последний и самый важный вопрос — когда это делать?

Стандартизация используется для масштабирования функций, когда ваши данные следуют распределению Гаусса. Это наиболее полезно для:

  • Оптимизация алгоритмов, таких как градиентный спуск
  • Модели кластеризации или классификаторы на основе расстояния, такие как K-ближайшие соседи
  • Диапазоны данных с высокой дисперсией, такие как анализ основных компонентов.

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

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

В отличие от стандартизации, нормализация направлена ​​на несколько иной подход к проблеме масштабирования функций (на мой взгляд, более интуитивный) -

Выполняется следующим образом

Но что это значит? Формула преобразует любое значение x в наборе данных, беря разницу от минимального значения, а затем деля на разницу между максимальным и минимальным значением, присутствующим в наборе данных, что в результате дает X_norm некоторые интересные свойства — поскольку мы делаем x-min(x) значение числителя всегда будет находиться в диапазоне от 0 до (max(x)-min(x)), его деление на (max(x)-min(x)) гарантирует, что значение будет лежать между 0 и 1, что, напомню вам, не относится к стандартизации данных.

Интересно, верно, но зачем нам использовать нормализацию, если у нас уже есть стандартизация?

Ну две причины-

  1. Во-первых, и, очевидно, когда нам нужно, чтобы наши данные находились строго между 0 и 1, нормализация — это путь.
  2. Если вы не знаете распределение своего набора данных, нормализация и в этом случае будет лучшим выбором.

"почему?" остается прежним — мы используем нормализацию, чтобы привести наши данные к такому масштабу, чтобы модель не обрабатывала какую-либо одну переменную несправедливо, как описано выше.

Давайте теперь перейдем к 'как' этого, как мне использовать нормализацию в моем собственном коде?

Мы снова воспользуемся помощью библиотеки scikit-learn. Мы импортируем класс "Normalizer" из модуля предварительной обработки "sklearn" точно так же, как мы делали это для StandardScaler.

Вот и все. В трех строках кода мы нормализовали наши данные, используя python и scikit-learn.

Обратите внимание, как теперь все значения находятся между 0 и 1? В этом сила нормализатора.

В заключение я хотел бы дать вам некоторые плюсы и минусы обоих вышеперечисленных методов, чтобы вы могли принять более обоснованное решение относительно того, когда вы должны их применять, если вообще.

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

Я хотел бы, наконец, попрощаться с вами, предоставив эту диаграмму, которая суммирует, какие алгоритмы требуют масштабирования наших функций.

(Примечание: такие алгоритмы, как наивный байесовский анализ, линейный дискриминантный анализ и древовидные модели (повышение градиента, случайный лес и т. д.), не требуют масштабирования признаков, поскольку на самом деле они не зависят от расстояний.)

Заключение

Оба метода — стандартизация и нормализация — используются для преобразования наших функций в значения аналогичного масштаба. Стандартизация направлена ​​на достижение этого путем преобразования μ в 0 и σ в 1, тогда как нормализация стремится сделать это путем преобразования каждого значения в диапазон от 0 до 1.