MinMaxScaler против StandardScaler против RobustScaler
Масштабирование функций - это процесс нормализации диапазона функций в наборе данных.
Реальные наборы данных часто содержат функции, которые различаются по степени величины, диапазону и единицам измерения. Следовательно, чтобы модели машинного обучения интерпретировали эти функции в одном масштабе, нам необходимо выполнить масштабирование функций.
В мире науки мы все знаем, как важно сравнивать яблоки с яблоками, и все же многие люди, особенно новички, имеют тенденцию упускать из виду масштабирование функций как часть предварительной обработки данных для машинного обучения. Как мы увидим в этой статье, это может привести к тому, что модели будут делать неточные прогнозы.
В этой статье мы обсудим:
- Почему важно масштабирование функций
- Разница между нормализацией и стандартизацией
- Почему и как масштабирование функций влияет на производительность модели
В частности, мы рассмотрим 3 различных средства масштабирования в библиотеке Scikit-learn для масштабирования функций, а именно:
Как обычно, вы можете найти полную записную книжку на моем GitHub здесь.
Набор данных
Для целей этого руководства мы будем использовать один из наборов данных игрушек в Scikit-learn, набор данных о ценах на жилье в Бостоне.
Это проблема регрессии в машинном обучении, поскольку цены на жилье являются непрерывной переменной.
Изучить данные
Давайте сначала получим общее представление о наших данных.
Это первые 5 строк набора данных.
Как видим, у нас есть 13 независимых переменных и целевая переменная.
Ура, без пропущенных значений! Это означает, что нам не нужно беспокоиться о вменении или удалении строк или столбцов с недостающими данными.
Кроме того, также оказывается, что все наши независимые переменные, а также целевая переменная относятся к типу данных float64.
Мы можем ясно видеть, что функции имеют очень разные масштабы. Это в значительной степени связано с различными единицами измерения и регистрации этих характеристик.
Именно здесь масштабирование функций может помочь нам решить эту проблему.
Понимание эффектов различных скейлеров
В этом разделе мы узнаем различие между нормализацией и стандартизацией. Кроме того, мы также рассмотрим трансформирующие эффекты 3 различных методов масштабирования функций в Scikit-learn.
Нормализация
Нормализация, также известная как масштабирование минимум-максимум, представляет собой метод масштабирования, при котором значения в столбце сдвигаются так, чтобы они были ограничены фиксированным диапазоном от 0 до 1.
MinMaxScaler - это функция Scikit-learn для нормализации.
Стандартизация
С другой стороны, стандартизация или нормализация Z-показателя - это еще один метод масштабирования, при котором значения в столбце масштабируются таким образом, чтобы они демонстрировали свойства стандартного гауссовского распределения, то есть среднее значение = 0 и дисперсия = 1.
StandardScaler - это функция Scikit-learn для стандартизации.
В отличие от StandardScaler, RobustScaler масштабирует функции, используя статистику, устойчивую к выбросам. В частности, RobustScaler удаляет медианное значение и масштабирует данные в соответствии с межквартильным размахом, тем самым делая его менее восприимчивым к выбросам в данных.
Нормализация против стандартизации
Здесь возникает вопрос на миллион долларов - когда нам следует использовать нормализацию, а когда - стандартизацию?
Как бы я ни ненавидел ответ, который собираюсь дать, это зависит.
Выбор между нормализацией и стандартизацией действительно сводится к применению.
Стандартизация обычно предпочтительнее нормализации в большинстве случаев машинного обучения, поскольку это особенно важно при сравнении сходства между функциями на основе определенных мер расстояния. Это наиболее заметно в анализе главных компонентов (PCA), алгоритме уменьшения размерности, где нас интересуют компоненты, которые максимизируют дисперсию данных.
Нормализация, с другой стороны, также предлагает множество практических приложений, особенно в компьютерном зрении и обработке изображений, где интенсивности пикселей должны быть нормализованы, чтобы соответствовать цветовому диапазону RGB от 0 до 255. Более того, алгоритмы нейронной сети обычно требуют, чтобы данные были нормализованы по шкале от 0 до 1 перед обучением модели.
В конце концов, нет однозначного ответа на вопрос, следует ли вам нормализовать или стандартизировать свои данные. Всегда можно применить оба метода и сравнить производительность модели при каждом подходе для достижения наилучшего результата.
Применение
Теперь, когда мы получили теоретическое понимание масштабирования функций и разницы между нормализацией и стандартизацией, давайте посмотрим, как они работают на практике.
Чтобы продемонстрировать эффекты MinMaxScaler, StandardScaler и RobustScaler, я решил изучить следующие функции в нашем наборе данных до и после реализации масштабирования функций:
- ZN
- ВОЗРАСТ
- НАЛОГ
- B
Как мы видим, диапазоны наших исходных функций сильно различаются.
MinMaxScaler удалось изменить масштаб этих функций, чтобы их значения были ограничены от 0 до 1.
StandardScaler и RobustScaler, с другой стороны, изменили масштаб этих функций, так что они распределены вокруг среднего значения 0.
Какие модели требуют масштабирования функций?
Во введении я упоминал, что немасштабированные данные могут отрицательно повлиять на способность модели делать точные прогнозы, но пока мы еще не обсудили, как именно и почему они это делают.
На самом деле масштабирование функций не всегда приводит к повышению производительности модели. Некоторые модели машинного обучения не требуют масштабирования функций.
В этом разделе статьи мы рассмотрим следующие классы алгоритмов машинного обучения и выясним, повлияет ли масштабирование функций на их производительность:
- Алгоритмы на основе градиентного спуска
- Алгоритмы на основе расстояния
- Древовидные алгоритмы
Алгоритмы на основе градиентного спуска
Градиентный спуск - это итеративный алгоритм оптимизации, который сводит нас к минимуму функции.
Алгоритмы машинного обучения, такие как линейная регрессия и логистическая регрессия, полагаются на градиентный спуск, чтобы минимизировать свои функции потерь или, другими словами, уменьшить ошибку между прогнозируемыми значениями и фактическими значениями.
Наличие функций с разной степенью величины и диапазона приведет к разным размерам шага для каждой функции. Следовательно, чтобы градиентный спуск сходился более плавно и быстро, нам необходимо масштабировать наши объекты так, чтобы они имели одинаковый масштаб.
Посмотрите это видео, где Эндрю Нг более подробно объясняет алгоритм градиентного спуска.
Алгоритмы на основе расстояния
Алгоритмы, лежащие в основе моделей, основанных на расстоянии, делают их наиболее уязвимыми для немасштабированных данных.
Такие алгоритмы, как k-ближайшие соседи, машины опорных векторов и кластеризация k-средних, используют расстояние между точками данных для определения их сходства. Следовательно, функциям с большей величиной будет присвоен более высокий вес моделью. Это не идеальный сценарий, поскольку мы не хотим, чтобы наша модель была сильно смещена в сторону одной функции.
Очевидно, крайне важно реализовать масштабирование характеристик наших данных, прежде чем подгонять их под алгоритмы, основанные на расстоянии, чтобы гарантировать, что все функции в равной степени влияют на результат прогнозов.
Древовидные алгоритмы
Каждый узел в модели деревьев классификации и регрессии (CART), также известной как деревья решений, представляет собой одну функцию в наборе данных.
Дерево разбивает каждый узел таким образом, чтобы повысить однородность этого узла. На это разбиение не влияют другие функции в наборе данных.
По этой причине мы можем сделать вывод, что деревья решений инвариантны к масштабу функций и, следовательно, не требуют масштабирования функций.
Сюда также входят другие ансамблевые модели, основанные на деревьях, например случайный лес и повышение градиента.
Сравнение точности модели
Теперь, когда мы понимаем типы моделей, которые чувствительны и нечувствительны к масштабированию функций, давайте теперь убедимся на конкретном примере с использованием набора данных о ценах на жилье в Бостоне.
Я выбрал 2 алгоритма на основе расстояния (KNN и SVR), а также 1 алгоритм на основе дерева (регрессор деревьев решений) для нашего небольшого эксперимента.
Здесь я построю конвейер машинного обучения, который содержит средство масштабирования и модель. Используя этот конвейер, мы подгоним и трансформируем функции, а затем сделаем прогнозы с использованием модели. Затем эти прогнозы оцениваются с использованием среднеквадратичной ошибки.
Мы должны ожидать улучшения производительности модели с масштабированием функций в KNN и SVR и постоянной производительности модели в деревьях решений с масштабированием функций или без них.
KNN
Результаты модели KNN следующие.
Как и ожидалось, при масштабировании функций ошибки намного меньше, чем без масштабирования. Другими словами, наша модель работала лучше при использовании масштабированных функций.
В этом примере KNN лучше всего работает с RobustScaler.
СВР
Результаты модели SVR следующие.
Подобно KNN, SVR также лучше работает с масштабированными функциями, что видно по меньшим ошибкам.
В этом примере SVR лучше всего работает в StandardScaler.
Древо решений
Результаты модели дерева решений следующие.
Как и ожидалось, дерево решений нечувствительно ко всем методам масштабирования функций, как видно из RMSE, которые безразличны между масштабированными и немасштабированными функциями.
Вывод
Молодцы, что дочитали статью до конца!
Подводя итог, масштабирование объектов - это процесс преобразования объектов в наборе данных таким образом, чтобы их значения имели одинаковый масштаб.
В этой статье мы узнали разницу между нормализацией и стандартизацией, а также 3 различных средства масштабирования в библиотеке Scikit-learn: MinMaxScaler, StandardScaler и RobustScaler.
Мы также узнали, что алгоритмы градиентного спуска и алгоритмы на основе расстояния требуют масштабирования функций, а алгоритмы на основе деревьев - нет. Нам удалось доказать это на примере с набором данных о ценах на жилье в Бостоне и сравнением точности модели с масштабированием характеристик и без него.
Надеюсь, что вы узнали что-то новое из этой статьи. Не стесняйтесь ознакомиться с другими моими статьями о предварительной обработке данных с помощью Scikit-learn.
Удачного обучения!
использованная литература
- Масштабирование функций для машинного обучения: понимание разницы между нормализацией и стандартизацией
- Нормализация vs стандартизация