Метод опорных векторов (SVM) — это алгоритм машинного обучения с учителем, который применяется для классификации, регрессии и обнаружения выбросов. Основная идея заключается в построении гиперплоскости, которая разделяет данные на классы с максимально возможным зазором. Точки, ближайшие к границе разделения, называются опорными векторами — именно они определяют положение гиперплоскости.
Как это работает
В простейшем случае линейно разделимых данных алгоритм ищет прямую (или гиперплоскость в многомерном пространстве), которая не просто разделяет два класса, а делает это с наибольшим зазором. Чем шире зазор, тем устойчивее модель к небольшим отклонениям и шуму в новых данных.
Для линейно неразделимых данных применяется ядерный трюк (kernel trick). Он позволяет неявно перевести данные в пространство более высокой размерности, где их можно разделить линейно, без явного вычисления координат в этом пространстве. Популярные ядра — линейное, полиномиальное, радиальное базисное (RBF) и сигмоидное.
Зачем это нужно
SVM хорошо работает на малых и средних наборах данных, особенно когда число признаков сопоставимо или превышает число наблюдений. Алгоритм эффективен в задачах текстовой классификации, биоинформатике, распознавании изображений и финансовом скоринге. Благодаря использованию только опорных векторов, модель экономична по памяти.
Примеры
- Классификация текстов: определение спама в электронной почте по частотным признакам слов. SVM строит гиперплоскость в пространстве признаков, отделяя спам от нормальных писем.
- Медицинская диагностика: классификация опухолей как доброкачественных или злокачественных на основе морфологических признаков клеток.
- Финансовый скоринг: оценка кредитоспособности заёмщика по набору финансовых и демографических признаков.
- Распознавание рукописных цифр: классификация изображений цифр от 0 до 9 с использованием нелинейного ядра.
Формула или метрика
Задача оптимизации в линейном случае формулируется как минимизация 1/2 · ||w||2 при ограничениях yi(wTxi + b) ≥ 1 для всех i. Для линейно неразделимых данных вводится параметр C, регулирующий компромисс между шириной зазора и ошибками классификации.
Типичные ошибки
- Отсутствие масштабирования признаков. SVM чувствителен к масштабу данных: признаки с большим разбросом значений будут доминировать. Перед обучением необходимо нормализовать или стандартизировать признаки.
- Неверный выбор ядра и параметров. Использование RBF-ядра с слишком малым значением γ приводит к переобучению, с слишком большим — к недообучению. Параметр C также требует настройки.
- Применение SVM на очень больших наборах данных. Обучение SVM имеет высокую вычислительную сложность, поэтому на миллионах объектов алгоритм может быть непрактичным.
- Игнорирование дисбаланса классов. При сильном дисбалансе SVM может смещаться в сторону多数ного класса. Следует использовать веса классов или другие методы борьбы с дисбалансом.
Как улучшить
- Масштабируйте признаки. Используйте StandardScaler или MinMaxScaler перед обучением. Это одно из самых важных условий стабильной работы SVM.
- Подбирайте параметры через кросс-валидацию. GridSearchCV по параметрам C, γ и типу ядра позволяет найти оптимальную конфигурацию.
- Используйте линейное ядро для больших данных. Если признаков много, а объектов мало, линейное ядро часто работает быстрее и не хуже нелинейных.
- Применяйте веса классов при дисбалансе. Параметр
class_weight='balanced'в scikit-learn автоматически корректирует веса. - Комбинируйте SVM с отбором признаков. Удаление неинформативных признаков снижает риск переобучения и ускоряет обучение.