Навигация по миру машин опорных векторов и PCA для расширенного машинного обучения
Введение
В постоянно расширяющемся мире алгоритмов машинного обучения машины опорных векторов (SVM) считаются универсальным и мощным инструментом для задач классификации и регрессии. Эта статья познакомит вас с тонкостями SVM и даже прольет свет на анализ главных компонентов (PCA), ценный метод сокращения функций и визуализации данных.
Машины опорных векторов (SVM)
Машины опорных векторов — это класс алгоритмов обучения с учителем, которые в основном используются для классификации, но могут быть расширены и для задач регрессии. Что отличает SVM, так это их способность находить оптимальную гиперплоскость, которая лучше всего разделяет точки данных, принадлежащие разным классам. Именно эта гиперплоскость делает SVM такими эффективными в сценариях, где имеет значение разница между классами.
Маржа и гиперплоскость
Представьте себе точки данных, разбросанные в многомерном пространстве, причем каждая точка принадлежит одному из двух классов. Цель SVM — найти гиперплоскость, которая максимизирует разницу между ближайшими точками данных каждого класса. Эти ближайшие точки называются опорными векторами.
Ядерный трюк
SVM могут обрабатывать нелинейные данные, отображая их в многомерное пространство с помощью трюка ядра. Это преобразование позволяет SVM находить гиперплоскости в новом пространстве, эффективно обрабатывая сложные границы принятия решений.
Вот распространенные типы ядер, используемые в машинах опорных векторов (SVM), каждый из которых описан в одной строке:
- Линейное ядро: оно создает линейную границу решения и хорошо работает для линейно разделимых данных.
- Полиномиальное ядро: оно допускает нелинейные границы принятия решений и полезно, когда данные имеют полиномиальные отношения.
- Ядро радиальной базовой функции (RBF): оно универсально и подходит для различных типов данных, предлагая нелинейные границы принятия решений, основанные на сходстве с точками данных.
- Сигмовидное ядро: оно может моделировать сигмоидальные границы решений и часто используется в задачах двоичной классификации.
- Пользовательские ядра. Ядра можно настроить в соответствии с конкретными характеристиками ваших данных, что обеспечивает гибкость для уникальных сценариев.
Мы увидим практическое применение 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
- Эффективно в многомерных пространствах: SVM работают хорошо, даже если количество функций превышает количество образцов.
- Надежность против переобучения. SVM превосходно справляются с поиском наилучшего баланса между подгонкой данных и предотвращением переобучения.
- Гибкость с ядрами. Использование разных ядер позволяет SVM обрабатывать различные типы данных, включая нелинейные данные.
Анализ главных компонентов (PCA)
Анализ главных компонентов — это метод уменьшения размерности, используемый для упрощения многомерных данных при сохранении как можно большей дисперсии. PCA работает путем преобразования исходных объектов в новый набор ортогональных объектов, называемых главными компонентами.
Шаги в PCA
- Стандартизация. Стандартизируйте данные, чтобы среднее значение было равно нулю, а стандартное отклонение равно единице.
- Матрица ковариации. Рассчитайте матрицу ковариации стандартизированных данных.
- Собственные значения и собственные векторы. Вычислите собственные значения и собственные векторы ковариационной матрицы.
- Выбор главных компонентов: отсортируйте собственные значения в порядке убывания и выберите k верхних собственных векторов, чтобы сформировать главные компоненты.
- Преобразование данных: проецируйте данные на новое пространство, образованное выбранными основными компонентами.
Преимущества PCA
- Уменьшение размерности: PCA уменьшает количество функций, сохраняя при этом наиболее важную информацию, что приводит к повышению эффективности модели.
- Визуализация данных: PCA помогает визуализировать многомерные данные в пространстве более низкой размерности, помогая в исследовании данных и распознавании образов.
- Подавление шума: 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!