Влияние нормализации данных на точность линейных и нелинейных SVM-классификаторов

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

Как упоминалось в [1] и во многих других статьях, нормализация данных требуется, когда функции имеют разные диапазоны. Например, нормализация, когда у нас есть функции веса и роста, важна, поскольку их диапазон значений имеет разные масштабы: например, [~ 45–130 кг] для веса и [~ 120–230 см] для роста.

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

Итак, при каких обстоятельствах необходима нормализация данных? Чтобы ответить на этот вопрос, в этой статье показан наглядный пример, в котором сравнивается производительность линейного классификатора (классификатор SVM с linear-kernel) и нелинейного классификатора (SVM-классификатор с RBF-ядром) до и после реализации нормализации данных. .

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

Структура статьи:

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

Если вас интересуют классификаторы SVM, настоятельно рекомендуется прочитать:

Дрю Вилимитис, Уловка с ядром в машине опорных векторов (2018), Medium

Дополнительная информация о классификаторах SVM приведена в конце этой статьи (ссылки [3], [4] и [5]).

Импорт библиотек Python:

Создание набора данных:

Наборы данных были созданы с помощью функции make_blobs (), которая генерирует капли точек с распределением Гаусса. Было создано два набора данных BLOB-объектов с 1000 данными. Центры наборов данных находились в точках (100, 100) и (200, 200), а их стандартное отклонение составляло 120.

Реализация нормализации и масштабирования данных:

Как объяснено в [2], существуют разные способы нормализации данных. В этой статье наборы данных были нормализованы с использованием метода Min-Max Normalization. Этот метод устанавливает минимальное значение каждой функции на 0, а максимальное значение на 1. Остальные значения преобразуются в десятичное число от 0 до 1 согласно следующей формуле.

Чтобы изучить влияние масштабирования на результаты классификаторов, были реализованы нормализация данных для исходных данных и масштабирование (в 50 и 300 раз) для нормализованных данных.

up_scaled_dataset_values ​​= dataset_values ​​* scale_value

Графики всех сгенерированных данных:

Объявление и запуск классификатора SVM с линейным ядром:

Классификатор SVM с linear-kernel был создан с использованием библиотеки sklearn на Python. Половина данных была использована для обучения, а другая половина - для тестирования.

Результаты линейного классификатора показаны на рисунке 2. Как видно, масштаб не влияет на его работу.

Объявление и запуск классификатора SVM с ядром RBF:

Методология классификатора SVM с RBF-ядром аналогична упомянутой выше. Во-первых, классификатор был создан с использованием библиотеки sklearn на Python. Затем половина данных была использована для обучения, а другая половина - для тестирования.

По сравнению с линейным классификатором у этого нелинейного классификатора есть два гиперпараметра для настройки: гамма и c. В то время как гиперпараметр гамма был установлен на постоянное значение 1, классификатор повторял 20 раз с несколькими значениями c.

Результаты нелинейного классификатора показаны на рисунке 3. Оси графика:

  • Ось x: значения гиперпараметра c
  • Ось Y: точность классификатора.

Как видно на рис. 3, масштаб действительно влияет на точность, обеспечивая более высокую точность с нормализованными данными.

В заключение, линейное ядро ​​не зависит от масштабирования и нормализации данных, в то время как точность классификатора SVM с ядром RBF сильно зависит от масштаба набора данных.

Эта зависимость для этого конкретного классификатора возникает из-за использования евклидова расстояния при реализации трюка с ядром:

Для этого конкретного ядра показатель степени увеличивается пропорционально квадрату евклидова расстояния. Следовательно, чтобы повысить точность наборов данных с большими масштабами, значение гаммы должно быть уменьшено обратно пропорционально в 5² и 30² раз, когда масштаб увеличен в 50 и 300 раз соответственно.

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

Ссылки:

[1] Урваши Джайтле, Почему нормализация данных необходима для моделей машинного обучения (2018), Medium

[2] Цзысюань Чжан, Понимание нормализации данных в машинном обучении (2019), средний

[3] Kernel SVM (2015), Обмен стеками

[4] Брэндон Рорер, Как работают машины опорных векторов (2017), YouTube

[5] CodeEmporium, Support Vector Machine (2018), YouTube.