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

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

Что такое масштабирование функций?

Масштабирование характеристик - это метод, используемый для нормализации диапазона независимых переменных или характеристик данных. В обработке данных это также известно как нормализация данных и обычно выполняется на этапе предварительной обработки данных. Просто чтобы дать вам пример - если у вас есть несколько независимых переменных, таких как возраст, зарплата и рост; С их диапазоном (18–100 лет), (25 000–75 000 евро) и (1–2 метра) соответственно, масштабирование функций поможет им всем быть в одном диапазоне, например, с центром около 0 или в диапазоне (0,1) в зависимости от метода масштабирования.

Чтобы наглядно представить вышесказанное, давайте возьмем пример независимых переменных содержания алкоголя и яблочной кислоты в наборе данных о вине из Набор данных о винах, который хранится в репозитории машинного обучения UCI. Ниже вы можете увидеть влияние двух наиболее распространенных методов масштабирования (нормализация и стандартизация) на набор данных.

Способы масштабирования

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

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

Это простейший метод, также известный как масштабирование минимум-максимум или нормализация минимум-максимум, заключается в изменении масштаба диапазона функций для масштабирования диапазона в [0, 1]. Общая формула нормализации имеет вид:

Здесь max (x) и min (x) - максимальное и минимальное значения признака соответственно.

Мы также можем выполнить нормализацию по разным интервалам, например выбирает, чтобы переменная лежала в любом интервале [a, b], где a и b являются действительными числами. Чтобы изменить масштаб диапазона между произвольным набором значений [a, b], формула принимает следующий вид:

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

Стандартизация признаков делает значения каждого признака в данных нулевым средним и единичной дисперсией. Общий метод расчета состоит в том, чтобы определить среднее значение распределения и стандартное отклонение для каждого объекта и вычислить новую точку данных по следующей формуле:

Здесь σ - стандартное отклонение вектора признаков, а x - среднее значение вектора признаков.

Преобразование в единицу длины

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

В дополнение к вышеупомянутым 3 широко используемым методам, есть еще несколько методов для масштабирования функций, а именно. Силовой трансформатор, квантильный преобразователь, надежный скейлер и т. Д. В рамках данного обсуждения мы намеренно не углубляемся в детали этих методов.

Вопрос на миллион долларов: нормализация или стандартизация

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

Нормализация рекомендуется использовать, когда распределение данных не соответствует распределению Гаусса. Это может быть полезно в алгоритмах, которые не предполагают никакого распределения данных, таких как K-Nearest Neighbours.

В алгоритме нейронных сетей, который требует данных по шкале от 0 до 1, нормализация является важным этапом предварительной обработки. Другим популярным примером нормализации данных является обработка изображений, при которой интенсивности пикселей должны быть нормализованы, чтобы соответствовать определенному диапазону (например, от 0 до 255 для диапазона цветов RGB).

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

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

Есть некоторые моменты, которые можно учитывать при принятии решения о том, нужна ли нам стандартизация или нормализация.

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

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

Связь между масштабированием данных и утечкой данных

Чтобы применить нормализацию или стандартизацию, мы можем использовать предварительно созданные функции в scikit-learn или создать нашу собственную настраиваемую функцию.

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

Когда масштабировать данные?

После понимания того, как выполнять масштабирование данных и какие методы масштабирования данных использовать, теперь мы можем поговорить о том, где использовать эти методы масштабирования данных.

Алгоритмы на основе градиентного спуска

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

В частности, в случае алгоритмов нейронных сетей масштабирование функций дает преимущества оптимизации за счет:

  • Это ускоряет обучение
  • Это предотвращает застревание оптимизации в локальных оптимумах.
  • Это дает лучшую форму поверхности ошибки
  • Снижение веса и байесовская оптимизация могут быть выполнены более удобно

Дистанционные алгоритмы

На алгоритмы, основанные на расстоянии, такие как KNN, K-means и SVM, больше всего влияет диапазон функций. Это связано с тем, что за кулисами они используют расстояния между точками данных, чтобы определить их сходство и, следовательно, выполнить поставленную задачу. Поэтому мы масштабируем наши данные перед использованием алгоритма, основанного на расстоянии, чтобы все функции в равной степени влияли на результат.

Для проектирования функций с использованием PCA

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

А как насчет регресса?

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

  • Когда одна переменная имеет очень большой масштаб: например, если вы используете численность населения страны в качестве предиктора. В этом случае коэффициенты регрессии могут иметь очень небольшой порядок величины (например, e ^ -9), что может немного раздражать, когда вы читаете данные с компьютера, поэтому вы можете преобразовать переменную для, например, размера популяции в миллионах или просто выполнить нормализацию.
  • При создании степенных терминов: допустим, у вас есть переменная X, которая находится в диапазоне от 1 до 2, но вы подозреваете криволинейную связь с переменной ответа, и поэтому хотите создать член X². Если вы сначала не отцентрируете X, ваш член в квадрате будет сильно коррелировать с X, что может затруднить оценку бета-версии. Центрирование первым решает эту проблему.
  • Создание условий взаимодействия: если термин взаимодействия / продукта создается из двух переменных, которые не центрированы на 0, будет индуцирована некоторая коллинеарность (точное количество зависит от различных факторов).

Центрирование / масштабирование не влияет на ваш статистический вывод в регрессионных моделях - оценки корректируются соответствующим образом, и значения p будут такими же. Масштаб и расположение независимых переменных никоим образом не влияют на достоверность регрессионной модели.

Бета-версии оцениваются таким образом, что они соответствующим образом преобразуют единицы каждой независимой переменной в единицы переменной ответа.

Рассмотрим модель:

y=β0+β1x1+β2x2+…+ϵy=β0+β1x1+β2x2+…+ϵ.

На оценки наименьших квадратов β1, β2,… β1, β2,… сдвиг не влияет. Причина в том, что это наклоны аппроксимирующей поверхности - насколько поверхность изменится, если вы измените x1, x2,… x1, x2,… на одну единицу. Это не зависит от местоположения. Масштабирование не влияет на оценки других уклонов. Таким образом, масштабирование просто соответствует масштабированию соответствующих наклонов.

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

Когда масштабирование данных НЕ требуется?

Древовидные алгоритмы

Алгоритмы на основе дерева довольно нечувствительны к масштабу функций. Дерево решений разбивает узел только на основе одной функции. Дерево решений разбивает узел по признаку, который увеличивает однородность узла. На это разделение функции не влияют другие функции. Следовательно, на раскол практически нет влияния оставшихся функций. Это то, что делает их инвариантными к масштабу объектов.

Следует ли вам ВСЕГДА заниматься разработкой функций?

Если есть некоторые алгоритмы, на которые не влияет масштабирование функций и которые могут работать с масштабированием функций или без них, но есть некоторые алгоритмы, которые просто не могут работать без масштабирования функций, разве нет смысла ВСЕГДА выполнять проектирование функций?

Ну, не ВСЕГДА - представьте себе классификацию чего-то, что имеет равные единицы измерения, записанные с шумом. Как фотография, или микрочип, или какой-то спектр. В этом случае вы уже априори знаете, что ваши характеристики имеют равные единицы. Если бы вы масштабировали их все, вы бы усилили эффект функций, которые постоянны для всех выборок, но были измерены с шумом. (Как фон на фото). Это снова окажет влияние на KNN и может резко снизить производительность, если ваши данные будут иметь более зашумленные постоянные значения по сравнению с теми, которые меняются.

Некоторые вопросы, которые вы должны задать себе, чтобы решить, является ли масштабирование хорошей идеей:

  • Что нормализация сделает с вашими данными при решении поставленной задачи? Должно ли это стать проще или вы рискуете удалить важную информацию?
  • Чувствителен ли алгоритм к масштабу данных?
  • Выполняет ли алгоритм или его фактическая реализация собственную нормализацию?

Спасибо за ваше время и внимание.

Посетите нашу галерею GitHub, чтобы узнать о некоторых интересных случаях использования и увидеть библиотеку Python со встроенным инструментом бизнес-аналитики в действии!

Вы также можете увидеть похожие QnA и другие статьи, которые мы опубликовали на нашей средней странице.