Полное руководство по масштабированию функций с помощью Scikit-Learn и Python
Что такое масштабирование?
Масштабирование — важная часть машинного обучения.
При этом не все алгоритмы машинного обучения требуют масштабирования. Вы должны знать это заранее при использовании этих алгоритмов.
Алгоритмы, требующие масштабирования функции:
- KNN (K-ближайшие соседи)
- Нейронные сети
- Линейная регрессия
- Логистическая регрессия
Алгоритмы, не требующие масштабирования признаков:
- Деревья решений
- Случайный лес
- АдаБуст
- Наивный Байес
Теперь давайте разберемся, зачем нужно масштабирование, на примере.
Предположим, мы собираемся приготовить чернично-банановый смузи. Что произойдет, если мы добавим в молоко один банан и одну чернику? Вы скажете, что смузи будет доминировать со вкусом банана, так как он больше по размеру по сравнению с черникой.
С другой стороны, опытный производитель смузи смешает Blueberry и One Banana в правильной пропорции, чтобы получить отличный вкус.
Масштабирование в машинном обучении по своей природе похоже на эту аналогию. У нас будет несколько функций, и все они имеют свой размер. Теперь, если мы просто подгоним их к нашей модели, то в результатах будет доминировать признак с наибольшим значением.
Таким образом, при масштабировании мы приводим все функции к одному масштабу, скажем, от 0 до 1, а затем передаем его модели. Таким образом, мы можем ожидать беспристрастного результата от нашей модели.
Два наиболее обсуждаемых метода масштабирования:
Normalizatoion
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, поскольку масштабатор, используемый при преобразовании, основан на обучающем наборе. Это абсолютно нормально.
Окончательно:
Подводя итог тому, что мы узнали в этой статье:
- Что такое масштабирование функций
- Когда его использовать
- Основные два типа масштабирования — нормализация и стандартизация.
- Вариант использования.
Я надеюсь, что эта статья расширит ваше понимание масштабирования функций в машинном обучении. Если вам понравилась статья, просто оставьте лайк и комментарий. Я хотел бы услышать, что вы думаете.