0Pricing
Learn AI with Python · Урок

Классификация с помощью SVM и sklearn

SVC, LinearSVC, выбор ядра, class_weight='balanced', probability=True

«Классификация с помощью SVM и sklearn» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.

SVM в библиотеке машинного обучения

Библиотека машинного обучения предлагает несколько классификаторов SVM. Основной из них — SVC, который поддерживает линейные границы и границы на основе ядер через параметр kernel.

from sklearn.svm import SVC

model = SVC(kernel="rbf", C=1.0, gamma="scale")
model.fit(Xtr, ytr)
print(model.score(Xte, yte))

Основные параметры SVC

Поведение SVC определяют три параметра:

  • kernel — тип границы (линейный, радиальное базисное, полиномиальное)
  • C — штраф за ошибки / регуляризация
  • gamma — ширина ядра для радиального базисного и полиномиального вариантов
from sklearn.svm import SVC

model = SVC(kernel="rbf", C=10, gamma=0.1)

Всегда сначала масштабируйте признаки

SVM чувствительны к масштабу признаков. Объединяйте масштабатор и SVC в конвейер, чтобы масштабирование обучалось только на обучающих данных, в том числе внутри перекрёстной проверки.

from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf"))
pipe.fit(Xtr, ytr)

LinearSVC для больших наборов данных

SVC(kernel="linear") плохо масштабируется при большом количестве образцов. LinearSVC использует более быстрый решатель, оптимизированный для линейных задач, и значительно лучше работает с большими данными высокой размерности.

from sklearn.svm import LinearSVC

model = LinearSVC(C=1.0, max_iter=5000)
model.fit(Xtr, ytr)

SVC и LinearSVC

Используйте LinearSVC для больших или разреженных данных (например, текста). Используйте SVC, когда нужны ядра для нелинейных границ. Учтите, что LinearSVC использует немного другую функцию потерь и не поддерживает predict_proba.

Дисбаланс классов

Когда один класс встречается редко, SVM обычно отдаёт предпочтение большинству. Установка class_weight="balanced" автоматически присваивает классам веса, обратно пропорциональные их частоте.

from sklearn.svm import SVC

model = SVC(kernel="rbf", class_weight="balanced")
model.fit(Xtr, ytr)

Настройка весов классов

Вы также можете передать явный словарь в class_weight, чтобы придать определённому классу больший вес, чем при автоматическом выравнивании.

from sklearn.svm import SVC

model = SVC(class_weight={0: 1, 1: 5})  # class 1 errors cost 5x

Оценки вероятностей

По умолчанию SVC возвращает жёсткие метки. Установите probability=True, чтобы включить predict_proba (с помощью внутренней калибровки); это необходимо для ROC AUC и настройки порога. Обучение станет медленнее.

from sklearn.svm import SVC

model = SVC(probability=True)
model.fit(Xtr, ytr)
proba = model.predict_proba(Xte)[:, 1]

Многоклассовые SVM

SVC автоматически обрабатывает более двух классов по схеме «один против одного». Вам не нужно изменять код: просто выполните обучение с многоклассовыми метками, и всё будет работать.

from sklearn.svm import SVC

model = SVC(decision_function_shape="ovr")
model.fit(X_multiclass, y_multiclass)

Настройка C и гаммы с помощью GridSearchCV

Стандартный подход — выполнить поиск по сетке для C и gamma в логарифмическом масштабе, поместив всё это в конвейер масштабирования.

from sklearn.model_selection import GridSearchCV
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC

pipe = make_pipeline(StandardScaler(), SVC(kernel="rbf"))
param = {
    "svc__C": [0.1, 1, 10, 100],
    "svc__gamma": [0.001, 0.01, 0.1, 1],
}
gs = GridSearchCV(pipe, param, cv=5, scoring="f1")
gs.fit(Xtr, ytr)
print(gs.best_params_)

Практические советы

SVM особенно хорошо работают на небольших и средних наборах данных с чётко выраженными границами. На очень больших объёмах данных они испытывают трудности (используйте LinearSVC или перейдите к бустингу). Всегда масштабируйте признаки, настраивайте C и гамму и используйте class_weight при несбалансированных классах.

Быстрая проверка

Проверьте свои знания о SVM в sklearn.

Итоги

Итоги: Используйте SVC с параметрами kernel, C и gamma для нелинейной классификации, обязательно помещая его в конвейер масштабирования. Для больших наборов данных или текстовых данных переходите на LinearSVC. Обрабатывайте дисбаланс с помощью class_weight="balanced", а параметры C и gamma настраивайте совместно с помощью GridSearchCV.

Часто задаваемые вопросы

Урок «Классификация с помощью SVM и sklearn» бесплатный?

Да — полный текст урока «Классификация с помощью SVM и sklearn» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.

Чему я научусь в уроке «Классификация с помощью SVM и sklearn»?

SVC, LinearSVC, выбор ядра, class_weight='balanced', probability=True Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn AI with Python?

Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Классификация с помощью SVM и sklearn»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn AI with Python?

Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Теория SVM: отступы и опорные векторы
  2. Ядерный трюк: RBF, полиномиальное и сигмоидальное ядра
  3. Классификация с помощью SVM и sklearn
  4. Регрессия с помощью SVM (SVR)
← Назад к Learn AI with Python