Навигация по миру машин опорных векторов и PCA для расширенного машинного обучения

Введение

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

Машины опорных векторов (SVM)

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

Маржа и гиперплоскость

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

Ядерный трюк

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

Вот распространенные типы ядер, используемые в машинах опорных векторов (SVM), каждый из которых описан в одной строке:

  1. Линейное ядро: оно создает линейную границу решения и хорошо работает для линейно разделимых данных.
  2. Полиномиальное ядро: оно допускает нелинейные границы принятия решений и полезно, когда данные имеют полиномиальные отношения.
  3. Ядро радиальной базовой функции (RBF): оно универсально и подходит для различных типов данных, предлагая нелинейные границы принятия решений, основанные на сходстве с точками данных.
  4. Сигмовидное ядро: оно может моделировать сигмоидальные границы решений и часто используется в задачах двоичной классификации.
  5. Пользовательские ядра. Ядра можно настроить в соответствии с конкретными характеристиками ваших данных, что обеспечивает гибкость для уникальных сценариев.

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

Давайте импортируем набор данных.

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8124 entries, 0 to 8123
Data columns (total 23 columns):
 #   Column                    Non-Null Count  Dtype 
---  ------                    --------------  ----- 
 0   poisonous                 8124 non-null   object
 1   cap_shape                 8124 non-null   object
 2   cap_surface               8124 non-null   object
 3   cap_color                 8124 non-null   object
 4   bruises                   8124 non-null   object
 5   odor                      8124 non-null   object
 6   gill_attachment           8124 non-null   object
 7   gill_spacing              8124 non-null   object
 8   gill_size                 8124 non-null   object
 9   gill_color                8124 non-null   object
 10  stalk_shape               8124 non-null   object
 11  stalk_root                8124 non-null   object
 12  stalk_surface_above_ring  8124 non-null   object
 13  stalk_surface_below_ring  8124 non-null   object
 14  stalk_color_above_ring    8124 non-null   object
 15  stalk_color_below_ring    8124 non-null   object
 16  veil_type                 8124 non-null   object
 17  veil_color                8124 non-null   object
 18  ring_number               8124 non-null   object
 19  ring_type                 8124 non-null   object
 20  spore_print_color         8124 non-null   object
 21  population                8124 non-null   object
 22  habitat                   8124 non-null   object
dtypes: object(23)
memory usage: 1.4+ MB

Shape of dataset : (8124, 23)
Columns wise : Missing values freq
poisonous                   0.0
cap_shape                   0.0
cap_surface                 0.0
cap_color                   0.0
bruises                     0.0
odor                        0.0
gill_attachment             0.0
gill_spacing                0.0
gill_size                   0.0
gill_color                  0.0
stalk_shape                 0.0
stalk_root                  0.0
stalk_surface_above_ring    0.0
stalk_surface_below_ring    0.0
stalk_color_above_ring      0.0
stalk_color_below_ring      0.0
veil_type                   0.0
veil_color                  0.0
ring_number                 0.0
ring_type                   0.0
spore_print_color           0.0
population                  0.0
habitat                     0.0
dtype: float64
Column name poisonous : {'p', 'e'}
Column name cap_shape : {'b', 'k', 'f', 'c', 'x', 's'}
Column name cap_surface : {'s', 'y', 'f', 'g'}
Column name cap_color : {'b', 'u', 'r', 'p', 'y', 'c', 'w', 'e', 'g', 'n'}
Column name bruises : {'f', 't'}
Column name odor : {'m', 'p', 'a', 'f', 'c', 'y', 's', 'n', 'l'}
Column name gill_attachment : {'a', 'f'}
Column name gill_spacing : {'c', 'w'}
Column name gill_size : {'b', 'n'}
Column name gill_color : {'u', 'b', 'r', 'k', 'o', 'p', 'y', 'w', 'e', 'g', 'n', 'h'}
Column name stalk_shape : {'e', 't'}
Column name stalk_root : {'b', 'r', 'c', 'e', '?'}
Column name stalk_surface_above_ring : {'s', 'f', 'y', 'k'}
Column name stalk_surface_below_ring : {'s', 'f', 'y', 'k'}
Column name stalk_color_above_ring : {'b', 'p', 'y', 'c', 'w', 'e', 'g', 'n', 'o'}
Column name stalk_color_below_ring : {'b', 'p', 'y', 'c', 'w', 'e', 'g', 'n', 'o'}
Column name veil_type : {'p'}
Column name veil_color : {'o', 'y', 'w', 'n'}
Column name ring_number : {'o', 't', 'n'}
Column name ring_type : {'p', 'f', 'e', 'n', 'l'}
Column name spore_print_color : {'u', 'r', 'b', 'k', 'o', 'y', 'w', 'n', 'h'}
Column name population : {'v', 'a', 'y', 'c', 's', 'n'}
Column name habitat : {'d', 'u', 'm', 'p', 'w', 'g', 'l'}
(8124, 96)

0    4208
1    3916
Name: poisonous, dtype: int64

# Shape of x and y columns
((8124, 95), (8124,))

Теперь мы применим SVM для набора данных для всех 95 столбцов.

Accuracy Report : Train data
1.0
Accuracy Report : Test data
1.0
Classification Report : Train data
              precision    recall  f1-score   support

           0       1.00      1.00      1.00      2945
           1       1.00      1.00      1.00      2741

    accuracy                           1.00      5686
   macro avg       1.00      1.00      1.00      5686
weighted avg       1.00      1.00      1.00      5686

Classification Report : Test data
              precision    recall  f1-score   support

           0       1.00      1.00      1.00      1263
           1       1.00      1.00      1.00      1175

    accuracy                           1.00      2438
   macro avg       1.00      1.00      1.00      2438
weighted avg       1.00      1.00      1.00      2438
confusion_matrix Report : Train data
[[2945    0]
 [   0 2741]]
confusion_matrix Report : Test data
[[1263    0]
 [   0 1175]]
[1.         1.         1.         1.         1.         1.
 1.         1.         0.99588477 1.        ]
Test mean accuracy : 0.9995884773662551

Test max accuracy : 1.0

Преимущества SVM

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

Анализ главных компонентов (PCA)

Анализ главных компонентов — это метод уменьшения размерности, используемый для упрощения многомерных данных при сохранении как можно большей дисперсии. PCA работает путем преобразования исходных объектов в новый набор ортогональных объектов, называемых главными компонентами.

Шаги в PCA

  1. Стандартизация. Стандартизируйте данные, чтобы среднее значение было равно нулю, а стандартное отклонение равно единице.
  2. Матрица ковариации. Рассчитайте матрицу ковариации стандартизированных данных.
  3. Собственные значения и собственные векторы. Вычислите собственные значения и собственные векторы ковариационной матрицы.
  4. Выбор главных компонентов: отсортируйте собственные значения в порядке убывания и выберите k верхних собственных векторов, чтобы сформировать главные компоненты.
  5. Преобразование данных: проецируйте данные на новое пространство, образованное выбранными основными компонентами.

Преимущества PCA

  1. Уменьшение размерности: PCA уменьшает количество функций, сохраняя при этом наиболее важную информацию, что приводит к повышению эффективности модели.
  2. Визуализация данных: PCA помогает визуализировать многомерные данные в пространстве более низкой размерности, помогая в исследовании данных и распознавании образов.
  3. Подавление шума: PCA может удалять шум и избыточность из данных, что приводит к созданию более надежных моделей.

Объединение SVM и PCA

Снижение размерности. Одним из основных преимуществ объединения SVM и PCA является уменьшение размерности входных данных при сохранении или даже повышении производительности модели. Это особенно полезно при работе с наборами данных большой размерности, где «проклятие размерности» может привести к увеличению вычислительной сложности и переобучению.

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

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

Проблемы и соображения

Хотя сочетание SVM и PCA дает значительные преимущества, важно учитывать потенциальные проблемы:

  • Оптимальная размерность. Определение оптимального количества сохраняемых основных компонентов может быть нетривиальной задачей. Такие методы, как перекрестная проверка, могут помочь определить правильное число.
  • Интерпретируемость. Уменьшение размерности данных может привести к ухудшению интерпретируемости функций. Понимание влияния этих компонентов на рассматриваемую проблему имеет решающее значение.
  • Выбор ядра. При использовании SVM с данными, преобразованными PCA, выбор соответствующей функции ядра остается важным для захвата нелинейных связей в сокращенном пространстве признаков.

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

array([0.17653548, 0.11252669])

Проецируя данные в двух измерениях, мы сохранили 38% дисперсии данных.

Для n_comComponents= 5 мы видим следующее

array([0.17653548, 0.11252669, 0.09156644, 0.05206166, 0.04389194])

Проецируя данные даже на 5 измерений, мы сохранили только 40 % дисперсии данных.

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

Accuracy Report : Train data
0.89
Accuracy Report : Test data
0.90

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

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

[0.9057377  0.89754098 0.8852459  0.8852459  0.89754098 0.90163934
 0.9057377  0.87704918 0.91358025 0.9218107 ]
Test mean accuracy : 0.8991128651420089

Test max accuracy : 0.9218106995884774

Заключение

Машины опорных векторов и анализ главных компонентов — одни из самых мощных инструментов машинного обучения.

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

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

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