Решение о масштабировании: факторы, которые следует учитывать перед масштабированием функций

Введение:

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

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

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

Когда использовать масштабирование объектов

Масштабирование объектов обычно используется, когда объекты в наборе данных имеют разные единицы измерения или когда необходимо сравнить объекты с очень разными диапазонами. Например, если набор данных содержит объекты в диапазоне от 0 до 100 и другие объекты в диапазоне от 0 до 1 000 000, может потребоваться масштабирование объектов, чтобы привести объекты к аналогичному масштабу. Это связано с тем, что некоторые алгоритмы могут более сильно взвешивать функции с большими диапазонами, что может негативно повлиять на производительность модели. Это также поможет в более быстрой конвергенции.

Различные методы масштабирования объектов

Существует множество методов масштабирования, вот некоторые из них:

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

x_std = (x — x.mean()) / x.std()

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

x_norm = (x — x.min()) / (x.max() — x.min())

Масштабирование Max-abs включает в себя преобразование объектов таким образом, чтобы максимальное абсолютное значение равнялось единице. Масштабирование Max-abs можно реализовать по следующей формуле:

x_scaled = x/x.max()

Степенное преобразование. Этот метод используется для стабилизации дисперсии признаков и придания распределению большей сходства с гауссовым. Одним из распространенных степенных преобразований является преобразование Бокса-Кокса, которое можно использовать для преобразования функции x в новую функцию y по следующей формуле:

у = (х ^ лямбда - 1) / лямбда

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

Преобразование журнала: этот метод преобразует объекты с асимметричным распределением или большим диапазоном значений. Логарифмическое преобразование может быть реализовано с использованием натурального логарифма (ln) или логарифма по основанию 10 (log10).

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

x_scaled = (x — x.mean()) / x.std (ddof = 1)

Среди них наиболее часто используются методы стандартизации и нормализации (также называемые )

Как масштабировать функции

Чтобы выполнить масштабирование функций, нам сначала потребуется импортировать базовые библиотеки и набор данных. Здесь мы будем использовать набор данных вина sklearn, чтобы увидеть масштабирование и сравнить его RMSE до и после масштабирования для алгоритмов RandomForestRegressor и K Nearest Neighbor. Ниже код вы можете увидеть в моем GitHub.

Давайте посмотрим, каков разброс данных перед масштабированием.

Как вы можете видеть, кроме столбцов «пролин», никакой другой столбец не читается, потому что он колеблется от почти 250 до 1700, в то время как разброс других столбцов низкий. График ниже покажет изменение отдельных столбцов:

Мы будем использовать как обычно используемые методы масштабирования, так и обучать наши модели всем трем типам данных: немасштабированным данным, масштабированным данным MinMax и стандартизированным данным.

Во-первых, давайте посмотрим, как используется масштабирование MinMax, и посмотрим на разброс данных после его выполнения.

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

Теперь у нас есть все три типа данных X_train, X_train_min_max и X_train_standard. Давайте используем эти данные для обучения наших моделей и сравнения RMSE для немасштабированных, масштабированных данных MinMax и стандартных масштабированных данных. Весь код можно найти на GitHub. Изображения ниже являются окончательным результатом тестирования с различными типами данных.

На приведенном выше изображении мы видим, что RMSE для RandomForest остается почти постоянным для всех трех различных типов данных, но в случае KNN он значительно уменьшился с 0,5 с немасштабированными данными до 0,15 с масштабированными данными, хотя с обоими типами масштабирования , мы получили почти такой же результат, но так будет не всегда. Но вопрос в том, почему RandomForest остался незатронутым масштабированием, но произошло значительное изменение RMSE для KNN. Ответ будет в следующем разделе.

Когда не следует использовать масштабирование функций

  1. Когда используемая модель не чувствительна к масштабу функций: некоторые алгоритмы машинного обучения, такие как деревья решений и случайные леса, не чувствительны к масштабу функций и не требуют масштабирования функций. Алгоритм дерева решений (на котором сделан алгоритм RandomForest) основан на разбиении по данным, которым все равно, масштабируются данные или нет. Разделения будут одинаковыми в обоих случаях, в то время как алгоритм KNN основан на расчете расстояния до ближайшего соседа, на который очень сильно влияет масштабирование, поэтому существует такая большая разница между RMSE немасштабированной и масштабированной модели KNN.
  2. Когда объекты уже имеют одинаковый масштаб: если объекты в наборе данных уже имеют одинаковый масштаб, нет необходимости использовать масштабирование объектов.
  3. Когда объекты являются бинарными: если объекты в наборе данных являются бинарными (т. е. они могут принимать только два значения), масштабирование объектов не требуется, поскольку они уже имеют одинаковый масштаб.

Заключение

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

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

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

Спасибо за прочтение. Я с нетерпением жду вашего комментария и поделитесь, если у вас есть уникальный опыт, связанный с масштабированием функций. Вы можете связать меня @LinkedIn.