Как нам известно, алгоритмы SVM в основном используются для классификации и редко для регрессии.

Хотя он предоставляет нам алгоритм SVR для выполнения необходимого.

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

Задача Support Vector - найти гиперплоскость в N-мерном пространстве, которая может классифицировать точки данных.

Точки данных, расположенные на краю и ближайшие к гиперплоскости, называются опорными векторами.

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

Он имеет математическую формулу для краевых линий по направлению к каждой стороне гиперплоскости, представленной следующим образом:

Yi = (w, xi) + b + отклонение

Yi = (w, xi) + b- отклонение

Шаги, которые необходимо выполнить для построения модели регрессии поддержки:

1) Найдите свои X и Y, независимые и зависимые наборы данных для обучения модели.

2) Просмотрите данные сразу и попытайтесь подобрать наиболее подходящий параметр ядра. Вы также можете попытаться построить точки данных и увидеть корреляцию.

Он может быть линейным, гауссовым или полиномиальным в зависимости от сложности.

Чаще всего используется ядро ​​Гаусса.

* Полиномиальное ядро: K (x, y) = (x .y +1) d, где d ›0 - константа, определяющая ядро

Порядок.

* Гауссовское ядро ​​RBF: K (x, y) = exp (- | x − y | 2 / 2σ2), где σ ›0 - параметр, который

Определяет ширину ядра. Соответствующие параметры d и σ определяются на этапе обучения.

3) Графики

4) Прогнозируйте любое независимое значение.

Теперь, не вдаваясь в теоретическую часть, давайте посмотрим, как это можно сделать на Python.

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

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

Шаг 2) Импорт набора данных

dataset=pd.read_csv('D:/blog/SVR/PostVsSalary.csv')

Шаг 3) Определение переменных X и Y, т. е. зависимых и независимых переменных.

X=dataset.iloc[:,1:2].values
y=dataset.iloc[:,2:].values

Здесь мы принимаем x как уровень должности и y как зарплату.

Шаг 4. Преобразуйте данные в скалярный формат

Как мы видим, существует огромный паритет между значениями должности или должности (1–10) и заработной платы (45000–1000000), поэтому нам нужны данные по аналогичным основаниям для работы модели регрессии опорных векторов.



Стандартный балл образца x рассчитывается как:

Xstandard = (x - среднее (x)) / стандартное отклонение

Мы делаем это с помощью библиотеки Python StandardScaler.

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

from sklearn.preprocessing import StandardScaler
 
st_x=StandardScaler()
st_y=StandardScaler()
 
X=st_x.fit_transform(x)
Y=st_y.fit_transform(y)

Шаг 5. Постройте данные, чтобы посмотреть

fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
ax.scatter(X,Y,color='r')

Отображение независимых переменных данных в виде красных точек.

Сделав значения скалярными

Шаг 6) Выберите ядро ​​для обучения данных.

Самый важный параметр SVR - это тип ядра. Это может быть полиномиальный или гауссовский SVR.

У нас есть нелинейное условие: мы можем выбрать полиномиальный или гауссовский, но здесь мы выбираем ядро ​​RBF (тип) (параметр = ’rbf’).

Полиномиальное ядро ​​требует большого количества сложных вычислений, на которые требуется время.

Ядро Гаусса - наиболее часто используемое ядро ​​при распознавании образов.

from sklearn.svm import SVR 
regressor=SVR(kernel='rbf') 
regressor.fit(X,y)

Шаг 6) Постройте график X и Y для линии прогноза

plt.scatter(X, Y, color = 'magenta')
plt.plot(X, regressor.predict(X), color = 'green')
plt.title('PostVsSalary(Support Vector Regression Model)')
plt.xlabel('Post')
plt.ylabel('Salary')
plt.show()

Шаг 7. Определение точек прогноза.

Помните, что здесь мы выполняли масштабирование данных. Теперь, если мы хотим вернуть данные в аналогичном формате, нам нужно уменьшить масштаб при выполнении прогнозов.

Здесь, если мы хотим спрогнозировать зарплату должности уровня 7,5, нам нужно создать массив с 7,5 и передать его нашей функции прогнозирования. Затем мы перевернем его, чтобы получить уменьшенное значение.

Следующий код сделает все необходимое.

# Predicting a new result
X_pred = sc_X.transform(np.array([[7.5]]))
y_scale_back = sc_y.inverse_transform(regressor.predict(X_pred))

Подходит SVR.

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

Надеюсь, что приведенный выше блог поможет в понимании SVR.

Спасибо за прочтение!

Первоначально опубликовано на https://www.numpyninja.com 29 сентября 2020 г.

Получите доступ к экспертному обзору - Подпишитесь на DDI Intel Получите доступ к экспертному обзору - Подпишитесь на DDI Intel