Полное руководство по масштабированию функций с помощью Scikit-Learn и Python

Что такое масштабирование?

Масштабирование — важная часть машинного обучения.

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

Алгоритмы, требующие масштабирования функции:

  • KNN (K-ближайшие соседи)
  • Нейронные сети
  • Линейная регрессия
  • Логистическая регрессия

Алгоритмы, не требующие масштабирования признаков:

  • Деревья решений
  • Случайный лес
  • АдаБуст
  • Наивный Байес

Теперь давайте разберемся, зачем нужно масштабирование, на примере.

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

С другой стороны, опытный производитель смузи смешает Blueberry и One Banana в правильной пропорции, чтобы получить отличный вкус.

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

Таким образом, при масштабировании мы приводим все функции к одному масштабу, скажем, от 0 до 1, а затем передаем его модели. Таким образом, мы можем ожидать беспристрастного результата от нашей модели.

Два наиболее обсуждаемых метода масштабирования:

  1. Normalizatoion
  2. Standardization.

Особое примечание. Ни нормализация, ни стандартизация не изменяют распределение данных.

Нормализация обычно изменяет масштаб значений в диапазоне [0, 1].

Его можно представить как

Здесь x-min и x-max — минимальное и максимальное значения признака X.

Стандартизация обычно масштабирует данные таким образом, чтобы среднее значение равнялось 0, а стандартное отклонение равнялось 1.

Его можно представить как

где μ - среднее значение признаков, и его можно представить как

и σ - стандартное отклонение признака.

Зачем нам масштабирование?

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

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

Пример использования

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

Мы будем использовать пакет yfinance для загрузки биржевых данных из Yahoo Finance.

Давайте загрузим данные за один год для тикера AAPL. Затем мы удаляем все остальные столбцы и оставляем только столбцы Close и Volume. Это будут наши features.

Давайте посмотрим на среднее значение признаков.

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

Давайте проверим распределение наших функций.

Как обсуждалось в начале, масштабирование может быть выполнено с помощью

  • Нормализация или
  • Стандартизация.

В sci-kit-learn мы называем эти библиотеки следующими именами:

  • МинМаксСкалер
  • Стандартный масштабатор

Давайте посмотрим их один за другим. Но перед этим нам нужно преобразовать наш dataFrame в массив NumPy.

Теперь давайте посмотрим на среднее

и стандартное отклонение

Стандартный масштабатор

В Scikit-Learn библиотека называется StandardScaler для стандартизации.

Помните, что при стандартизации среднее значение признаков будет равно 0, а стандартное отклонение всегда будет равно 1.

Теперь, после масштабирования, давайте проверим среднее значение и стандартное отклонение.

Итак, мы добились масштабирования с помощью StandardScaler. Но давайте посмотрим на гистограмму и проверим, изменилось ли распределение?

Как мы видим, распределение такое же, но данные масштабируются в одном масштабе.

МинмаксСкалер

Мы не будем пробовать MinmaxScaler для нормализации.

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

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

Итак, мы видим, что с помощью MinMaxScaler мы можем разделить данные между 0 и 1. Теперь давайте еще раз проверим гистограмму функций, чтобы убедиться, что распределение не изменилось.

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

Бонусные примечания

Использование масштабатора:

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

StandardScaler.fit(features_train)

StandardScaler.transform(features_train)

StandardScaler.transform(features_test)

Данные о кормлении:

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

Помнить:

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

Окончательно:

Подводя итог тому, что мы узнали в этой статье:

  1. Что такое масштабирование функций
  2. Когда его использовать
  3. Основные два типа масштабирования — нормализация и стандартизация.
  4. Вариант использования.

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