Регрессия с помощью SVM (SVR)
Трубка epsilon в SVR, nu-SVR, сравнение SVR с линейной регрессией на нелинейных данных
«Регрессия с помощью SVM (SVR)» — бесплатный урок Learn AI with Python на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn AI with Python, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn AI with Python содержит 4 уроков всего.
SVM подходят и для регрессии
Идея границы применима и к регрессии. Регрессия на опорных векторах (SVR) подбирает функцию, удерживая предсказания в пределах полосы допустимых отклонений и игнорируя небольшие ошибки.
Трубка, нечувствительная к эпсилону
SVR строит вокруг предсказываемой функции трубку эпсилона. Точки внутри трубки дают нулевые потери; штрафуются только точки снаружи. Благодаря этому модель сосредотачивается на существенных ошибках.
Зачем нужна трубка
Игнорируя небольшие отклонения, SVR меньше подстраивается под шум и строит более плавную и устойчивую аппроксимацию. Небольшие колебания в пределах допуска просто не влияют на модель.
Базовое использование SVR
SVR похож на SVC и поддерживает те же ядра. RBF обычно используется по умолчанию для нелинейной регрессии.
from sklearn.svm import SVR
model = SVR(kernel="rbf", C=100, epsilon=0.1, gamma="scale")
model.fit(Xtr, ytr)
print(model.score(Xte, yte))Параметр epsilon
epsilon задаёт ширину трубки. Больший epsilon означает более широкую полосу, меньшее число опорных векторов и более простую модель. Меньший epsilon позволяет точнее подогнать модель под данные.
from sklearn.svm import SVR
wide = SVR(epsilon=1.0) # tolerant, simpler
tight = SVR(epsilon=0.01) # fits closelyПараметр C в SVR
Как и в классификации, C определяет штраф за точки за пределами трубки. Больший C сильнее наказывает такие ошибки и заставляет модель точнее подстраиваться под данные; меньший C обеспечивает более сильную регуляризацию и более плавную кривую.
from sklearn.svm import SVR
flexible = SVR(C=1000) # fits training closely
smooth = SVR(C=0.1) # more regularizedepsilon и C: два разных параметра
Запомните различие: epsilon определяет ширину трубки (какую величину ошибки следует игнорировать), а C определяет штраф за ошибки за пределами трубки. Настраивайте оба параметра.
Масштабирование важно и для SVR
Как и все SVM, SVR зависит от расстояний и чувствителен к масштабу признаков. Всегда стандартизируйте признаки и при необходимости масштабируйте также целевую переменную для стабильного обучения.
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVR
pipe = make_pipeline(StandardScaler(), SVR(kernel="rbf"))
pipe.fit(Xtr, ytr)Настройка SVR
Выполните поиск по сетке для C, gamma и epsilon, чтобы найти наилучшую аппроксимацию. Для оценки используйте метрику регрессии, например отрицательную среднеквадратичную ошибку.
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVR
param = {
"C": [1, 10, 100],
"gamma": [0.01, 0.1, 1],
"epsilon": [0.01, 0.1, 0.5],
}
gs = GridSearchCV(SVR(), param, cv=5, scoring="neg_mean_squared_error")
gs.fit(Xtr, ytr)Вариант NuSVR
NuSVR заменяет epsilon на nu (от 0 до 1). Этот параметр напрямую определяет долю опорных векторов и ошибок обучения и представляет собой другой способ задания параметров, который некоторым пользователям проще понимать.
from sklearn.svm import NuSVR
model = NuSVR(nu=0.5, C=100, kernel="rbf")
model.fit(Xtr, ytr)Когда использовать SVR
SVR хорошо работает на небольших и средних наборах данных с нелинейными зависимостями, когда важна устойчивость к шуму. Для очень больших объёмов данных выбирайте линейные модели или градиентный бустинг, которые лучше масштабируются.
Быстрая проверка
Проверьте свои знания о SVR.
Итоги
Итоги: SVR подбирает функцию внутри трубки, нечувствительной к эпсилону, где точки внутри не создают потерь. epsilon задаёт ширину трубки (чем больше, тем проще модель), а C штрафует точки за её пределами. Всегда масштабируйте признаки, настраивайте C/gamma/epsilon и рассматривайте NuSVR как альтернативный способ задания параметров.
Часто задаваемые вопросы
Урок «Регрессия с помощью SVM (SVR)» бесплатный?
Да — полный текст урока «Регрессия с помощью SVM (SVR)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn AI with Python, подпишись на CoddyKit PRO. Курс Learn AI with Python содержит 4 уроков всего.
Чему я научусь в уроке «Регрессия с помощью SVM (SVR)»?
Трубка epsilon в SVR, nu-SVR, сравнение SVR с линейной регрессией на нелинейных данных Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Learn AI with Python?
Предыдущий опыт не требуется. Learn AI with Python на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Регрессия с помощью SVM (SVR)»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Learn AI with Python?
Да. Каждый урок Learn AI with Python включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Теория SVM: отступы и опорные векторы
- Ядерный трюк: RBF, полиномиальное и сигмоидальное ядра
- Классификация с помощью SVM и sklearn
- Регрессия с помощью SVM (SVR)