Научитесь создавать модель регрессии опорных векторов (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()
На этом графике реальные значения отображаются в «красном» цвете, а прогнозируемые значения - в «зеленом em. > ”Цвет. График модели SVR также отображается в цвете «Черный».
Я прилагаю ссылку на свой репозиторий github, где вы можете найти записную книжку Google Colab и файлы данных для справки.
Надеюсь, мне удалось четко объяснить программу построения модели регрессии опорного вектора с нелинейным набором данных.
Вы также можете найти объяснение программы для других моделей регрессии ниже:
- Простая линейная регрессия
- Множественная линейная регрессия
- Полиномиальная регрессия
- Регрессия опорных векторов
- Регрессия дерева решений
- Случайная лесная регрессия
В следующих статьях мы познакомимся с более сложными моделями регрессии, классификации и кластеризации. А пока желаю счастливого машинного обучения!