Научитесь создавать модель регрессии опорных векторов (SVR) в машинном обучении и анализировать результаты.

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

Обзор SVR

Машина опорных векторов (SVM) - очень популярный алгоритм машинного обучения, который используется как в регрессии, так и в классификации. Опорная векторная регрессия аналогична линейной регрессии в том, что уравнение линии равно y= wx+b. В SVR эта прямая линия называется гиперплоскостью. Точки данных по обе стороны от гиперплоскости, наиболее близкие к гиперплоскости, называются опорными векторами, которые используются для построения линии границы.

В отличие от других моделей регрессии, которые пытаются минимизировать ошибку между реальным и прогнозируемым значением, SVR пытается подобрать лучшую линию в пределах порогового значения (расстояние между гиперплоскостью и граничной линией), a. Таким образом, можно сказать, что модель SVR пытается удовлетворить условию -a < y-wx+b < a. Он использовал точки с этой границей, чтобы предсказать значение.

Для нелинейной регрессии функция ядра преобразует данные в более высокие измерения и выполняет линейное разделение. Здесь мы будем использовать ядро ​​rbf.

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

Анализ проблемы

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

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

На этом первом этапе мы будем импортировать библиотеки, необходимые для построения модели машинного обучения. Библиотека NumPy и matplotlib импортируются. Кроме того, мы импортировали библиотеку Pandas для анализа данных.

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

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

На этом этапе мы будем использовать pandas для хранения данных, полученных из моего репозитория github, и сохранить их как Pandas DataFrame с помощью функции «pd.read_csv».

Мы просматриваем наш набор данных и назначаем независимую переменную (x) столбцу «Часы обучения», а зависимую переменную (y) - последнему столбцу, который является «Знаки» для прогнозирования.

dataset = pd.read_csv('https://raw.githubusercontent.com/mk-gurucharan/Regression/master/SampleData.csv')
X = dataset.iloc[:, 0].values
y = dataset.iloc[:, 1].values
y = np.array(y).reshape(-1,1)
dataset.head(5)
>>
Hours of Study   Marks
32.502345        31.707006
53.426804        68.777596
61.530358        62.562382
47.475640        71.546632
59.813208        87.230925

Мы используем соответствующую функцию .iloc, чтобы нарезать DataFrame, чтобы присвоить эти индексы X и Y. В этом случае Часы обучения принимается как независимая переменная и присваивается X. Зависимая переменная, которая должен быть спрогнозирован, это последний столбец, который является Marks, и ему присваивается значение y. Мы изменим форму переменной y в вектор-столбец, используя reshape(-1,1).

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

Большинство доступных данных обычно имеют разный диапазон и величину, что затрудняет построение модели. Таким образом, диапазон данных необходимо нормализовать до меньшего диапазона, что позволяет модели быть более точной при обучении. В этом наборе данных данные нормализованы между небольшими значениями, близкими к нулю. Например, оценка 87,23092513 нормализована до 1,00475931, а оценка 53,45439421 нормализована до -1,22856288.

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_y = StandardScaler()
X = sc_X.fit_transform(X.reshape(-1,1))
y = sc_y.fit_transform(y.reshape(-1,1))

В большинстве распространенных моделей регрессии и классификации масштабирование функций в основном выполняется внутренними средствами. Support Vector Machine не является широко используемым классом, поэтому данные нормализованы до ограниченного диапазона.

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

При построении любой модели машинного обучения нам всегда нужно разделить данные на обучающий набор и тестовый набор. Модель SVR будет обучена с использованием значений обучающего набора, а прогнозы будут проверены на тестовом наборе. Из 100 строк 80 строк используются для обучения, а модель тестируется на оставшихся 20 строках в соответствии с условием test_size=0.2

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

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

В этом случае функция SVM импортируется и назначается переменной regressor. Используется ядро ​​«rbf» (радиальная базисная функция). Ядро RBF используется для внесения нелинейности в модель SVR. Это сделано потому, что наши данные нелинейны. regressor.fit используется для подгонки переменных X_train и y_train путем соответствующего изменения формы данных.

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

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

На этом этапе мы собираемся предсказать результаты набора тестов, используя построенную модель SVR. Функция Theregressor.predict используется для прогнозирования значений для X_test. Мы присваиваем предсказанные значения y_pred. Теперь у нас есть два данных: y_test (реальные значения) и y_pred (предсказанные значения).

y_pred = regressor.predict(X_test)
y_pred = sc_y.inverse_transform(y_pred)

Шаг 7: Сравнение набора тестов с прогнозируемыми значениями

На этом этапе мы отобразим значения y_test как Real Values ​​ и значения y_pred как Прогнозируемые значения для каждого теста X_test относительно друг друга в кадре данных Pandas.

df = pd.DataFrame({'Real Values':sc_y.inverse_transform(y_test.reshape(-1)), 'Predicted Values':y_pred})
df
>>
Real Values   Predicted Values
31.707006     53.824386
76.617341     61.430210
65.101712     63.921849
85.498068     80.773056
81.536991     72.686906
79.102830     60.357810
95.244153     89.523157
52.725494     54.616087
95.455053     82.003370
80.207523     81.575287
79.052406     67.225121
83.432071     73.541885
85.668203     78.033983
71.300880     76.536061
52.682983     63.993284
45.570589     53.912184
63.358790     76.077840
57.812513     62.178748
82.892504     64.172003
83.878565     93.823265

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

Шаг 8: Визуализация результатов SVR

На этом последнем шаге мы визуализируем модель SVR, которая была построена с использованием заданных данных, и нанесем на график значения «y» и «y_pred »на графике для визуализации результатов.

X_grid = np.arange(min(X), max(X), 0.1)
X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(sc_X.inverse_transform(X_test), sc_y.inverse_transform(y_test.reshape(-1)), color = 'red')
plt.scatter(sc_X.inverse_transform(X_test), y_pred, color = 'green')
plt.title('SVR Regression')
plt.xlabel('Position level')
plt.ylabel('Salary')
plt.show()

На этом графике реальные значения отображаются в «красном» цвете, а прогнозируемые значения - в «зеленом ”Цвет. График модели SVR также отображается в цвете «Черный».

Я прилагаю ссылку на свой репозиторий github, где вы можете найти записную книжку Google Colab и файлы данных для справки.



Надеюсь, мне удалось четко объяснить программу построения модели регрессии опорного вектора с нелинейным набором данных.

Вы также можете найти объяснение программы для других моделей регрессии ниже:

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