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

Оглавление:

  1. Введение
  2. Понимание SVR — концепция гиперплана
  3. Типы регрессии опорных векторов
  4. Реализация регрессии опорных векторов в Python
  5. Практический пример: построение прогнозной модели для выходной мощности электростанции с комбинированным циклом
  6. Заключение

Введение

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

Ключевые компоненты регрессии опорных векторов

1. Гиперплоскость. В SVR гиперплоскость представляет собой линию регрессии, которая лучше всего соответствует данным. Однако, в отличие от линейной регрессии, SVR допускает «запас» допуска, который контролируется двумя гиперпараметрами: эпсилон (ε) и C. Эпсилон определяет ширину поля, в то время как C контролирует компромисс между максимизацией допустимого отклонения. маржа и минимизировать ошибку.

2.Функции ядра. Для обработки нелинейных отношений SVR использует функции ядра для преобразования данных в многомерное пространство, где становится возможным линейное разделение. Обычно используемые функции ядра включают линейную, полиномиальную, радиальную базисную функцию (RBF) и сигмовидную.

3. Опорные векторы. Это точки данных, расположенные ближе всего к гиперплоскости и играющие жизненно важную роль в определении модели SVR. Только опорные векторы значительно влияют на модель, в то время как другие точки данных практически не влияют.

Типы регрессии опорных векторов

В основном существует три типа моделей SVR:

  1. Линейный SVR: этот тип SVR использует линейную функцию ядра и направлен на поиск линейной гиперплоскости, которая лучше всего соответствует данным.

2. Нелинейный SVR. Нелинейный SVR использует различные функции ядра (например, полиномиальную, радиальную базисную функцию Гаусса) для фиксации сложных нелинейных взаимосвязей между переменными.

3. Регрессия опорного вектора Epsilon: Epsilon-SVR вводит дополнительный параметр, называемый epsilon, который управляет шириной поля и допускает определенный допуск ошибок.

Преимущества регрессии опорных векторов

1. Надежность по отношению к выбросам: SVR менее чувствителен к выбросам по сравнению с традиционными методами регрессии. Поле вокруг гиперплоскости определяется опорными векторами, а выбросы часто не рассматриваются как опорные векторы, что делает модель более устойчивой к зашумленным данным.

2. Гибкость в обработке нелинейных данных. Возможность использования различных функций ядра позволяет SVR фиксировать сложные нелинейные отношения в данных. Эта гибкость делает его подходящим для широкого круга задач регрессии различной сложности.

3. Регуляризация: SVR включает регуляризацию через параметр C, предотвращая переоснащение и продвигая более обобщаемую модель.

Практика регрессии опорных векторов

В этом разделе вы узнаете, как выполнить регрессию опорных векторов в Python.

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

Шаг 1. Импорт библиотек Python

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

  • NumPy (для выполнения определенных математических операций)
  • pandas (для хранения данных в фреймах данных pandas)
  • matplotlib.pyplot (вы будете использовать matplotlib для построения графика данных)
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

Шаг 2. Загрузка набора данных

Давайте теперь импортируем данные в DataFrame. DataFrame — это тип данных в Python. Самый простой способ понять это - хранить все ваши данные в табличном формате.

df = pd.read_csv('Data[1].csv')
df.head()
X = df.iloc[:,:-1].values
y = df.iloc[:,-1].values

Шаг 3. Разделение набора данных на обучающий и тестовый наборы

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.25,random_state=42)

Эта строка импортирует функцию train_test_split из модуля sklearn.model_selection. Этот модуль предоставляет различные методы разделения данных на подмножества для обучения, оценки и проверки модели.

Здесь X и y представляют ваши входные функции и соответствующие целевые значения соответственно. Параметр test_size указывает долю данных, которые должны быть выделены для тестирования. В этом случае test_size=0,25 означает, что 25% данных будут зарезервированы для тестирования, а остальные 75% будут использованы для обучения.

Параметр random_state — это необязательный аргумент, который позволяет вам установить начальное значение для генератора случайных чисел. Предоставляя конкретное значение random_state (например, random_state=42), вы гарантируете, что данные разделены воспроизводимым образом.

Функция train_test_split возвращает четыре отдельных массива: X_train, X_test, y_train и y_test. X_train и y_train представляют данные обучения, а X_test и y_test представляют данные тестирования.

Шаг 4. Масштабирование функций

from sklearn.preprocessing import StandardScaler
sc_x = StandardScaler()
sc_y = StandardScaler()
X_train = sc_x.fit_transform(X_train)
y_train = sc_y.fit_transform(y_train)

Стандартизация — это распространенный метод предварительной обработки, используемый в машинном обучении для преобразования данных в стандартную шкалу. Библиотека scikit-learn предоставляет класс StandardScaler, который выполняет стандартизацию числовых данных.

В предоставленном фрагменте кода класс StandardScaler используется для стандартизации как входных функций (X_train), так и целевой переменной (y_train).

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

Создав экземпляр класса StandardScaler, например, sc_x для функций и sc_y для целевой переменной, вы можете подогнать масштаберы к обучающим данным с помощью метода fit_transform(). Этот метод вычисляет среднее значение и стандартное отклонение для каждого признака или целевой переменной и применяет формулу стандартизации.

После применения стандартизации преобразованные функции и целевая переменная сохраняются обратно в X_train и y_train соответственно. Стандартизированные данные теперь можно использовать для обучения моделей машинного обучения.

Шаг 5. Обучение модели регрессии опорных векторов на обучающем наборе

from sklearn.svm import SVR
regressor = SVR(kernel = 'rbf')
regressor.fit(X_train,y_train)

Первая строка кода импортирует класс SVR из модуля sklearn.svm, который обеспечивает реализацию регрессии опорных векторов.

Далее вы создаете экземпляр класса SVR и присваиваете его переменной regrssor. Параметр ядра установлен на «rbf», что указывает на то, что вы хотите использовать ядро ​​радиальной базисной функции (RBF) для модели SVR. Ядро RBF является популярным выбором для SVR, поскольку оно способно моделировать сложные нелинейные отношения между функциями и целевой переменной.

Затем вызывается метод регрессора fit() с X_train (входные функции) и y_train (целевая переменная) в качестве аргументов. Этот метод обучает модель SVR на предоставленных обучающих данных, используя ядро ​​RBF для захвата базовых шаблонов и взаимосвязей между функциями и целевой переменной.

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

Как только метод fit() завершится, модель SVR (регрессор) извлечет уроки из обучающих данных и будет готова делать прогнозы на новых, невидимых данных.

Шаг 6. Прогнозирование результатов набора тестов

y_pred = sc_y.inverse_transform(regressor.predict(sc_x.transform(X_test)).reshape(-1,1))
np.set_printoptions(precision=2)
print(y_pred)

Метод преобразования sc_x применяется к X_test для стандартизации новых данных с использованием тех же коэффициентов масштабирования, вычисленных для обучающих данных. Затем метод регрессора Predict() используется для прогнозирования стандартизированного X_test.

Предсказанная целевая переменная (y_pred) передается методу inverse_transform() функции sc_y. Этот метод отменяет стандартизацию, выполненную для целевой переменной обучения, возвращая прогнозируемые значения к их исходному масштабу. Reshape(-1,1) используется для преобразования предсказанных значений в вектор-столбец.

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

Шаг 6. Оценка производительности модели

from sklearn.metrics import r2_score
r2_score(y_pred,y_test)

Этот код импортирует функцию r2_score из модуля метрик scikit-learn. Функция r2_score обычно используется в качестве оценочной метрики для моделей регрессии, включая линейную регрессию. Он измеряет долю дисперсии целевой переменной, которая предсказуема на основе входных признаков.

Более высокий показатель R-квадрата указывает на лучшее соответствие регрессионной модели данным, где 1 означает идеальное соответствие, а 0 означает отсутствие связи между прогнозируемыми и фактическими значениями.

Показатель R-квадрата 0,9438 указывает на то, что примерно 94,38% дисперсии целевой переменной можно объяснить предсказаниями модели SVR. Это предполагает сильное соответствие модели данным.

Ссылка на код:



Заключение

Регрессия опорных векторов — ценный инструмент прогнозного моделирования, особенно при работе со сложными и нелинейными наборами данных. Вводя предел допуска и используя функции ядра, SVR может эффективно справляться с разнообразными реальными регрессионными проблемами. Его устойчивость к выбросам, гибкость в обработке нелинейных данных и гарантия глобального оптимума делают его предпочтительным выбором для многих исследователей и практиков. Поскольку область машинного обучения продолжает развиваться, SVR остается важным методом в наборе инструментов специалиста по данным для точного и надежного регрессионного анализа.