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

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

Обзор

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

В этом случае мы должны построить полиномиальную связь, которая будет точно соответствовать точкам данных на данном графике. Это называется полиномиальной регрессией. Формула кривой полиномиальной регрессии представлена ​​как y=w1x+w2x²+..+b

Ниже приведены изображения в формате GIF для подгонки модели линейной регрессии и модели полиномиальной регрессии к нелинейным данным.

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

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

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

В этих данных у нас есть две независимые переменные, а именно Position и Level. Есть одна независимая переменная, т. Е. Salary. Итак, в этой задаче мы должны обучить модель полиномиальной регрессии с этими данными, чтобы понять корреляцию между уровнем и зарплатой данных сотрудника в компании и иметь возможность прогнозировать зарплату для нового сотрудника на основе этих данных.

Шаг 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/PositionSalaries_Data.csv')
X = dataset.iloc[:, 1:-1].values
y = dataset.iloc[:, -1].values
dataset.head(5)
>>

Position           Level   Salary
Business Analyst   1       45000
Junior Consultant  2       50000
Senior Consultant  3       60000
Manager            4       80000
Country Manager    5       110000

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

Шаг 3. Обучение модели полиномиальной регрессии на всем наборе данных

Набор данных, который мы используем, имеет очень небольшое количество строк, и поэтому мы обучаем весь набор данных для построения модели полиномиальной регрессии. В этом случае функция «PolynomialFeatures» используется для задания степени полиномиальной линии, которую мы собираемся построить. Здесь степень установлена ​​как 4.

Затем независимая переменная X подбирается с помощью класса PolynomialFeatures и преобразуется в новую переменную X_poly. При этом переменная X преобразуется в новую матрицу X_Poly, которая состоит из всех полиномиальных комбинаций признаков со степенью = 4.

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
poly_reg = PolynomialFeatures(degree = 4)
X_poly = poly_reg.fit_transform(X)
lin_reg = LinearRegression()
lin_reg.fit(X_poly, y)

Класс «LinearRegression» также импортируется и назначается переменной «lin_reg», которая соответствует X_poly и y для построения модели.

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

На этом этапе мы собираемся спрогнозировать значения Salary на основе построенной модели полиномиальной регрессии. Функция regressor.predict используется для прогнозирования значений нашей независимой переменной X_poly. Мы назначаем предсказанные значения как y_pred. Теперь у нас есть два данных: y (реальные значения) и y_pred (предсказанные значения).

y_pred = lin_reg.predict(X_poly)

Шаг 5: Сравнение реальных значений с прогнозными значениями

На этом этапе мы напечатаем оба значения y как Реальные значения и значения y_pred как Прогнозируемые значения из каждый X_test в кадре данных Pandas.

df = pd.DataFrame({'Real Values':y, 'Predicted Values':y_pred})
df
>>
Real Values  Predicted Values
45000        53356.643357
50000        31759.906760
60000        58642.191142
80000        94632.867133
110000       121724.941725
150000       143275.058275
200000       184003.496504
300000       289994.172494
500000       528694.638695
1000000      988916.083916

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

Шаг 6. Визуализация результатов полиномиальной регрессии

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

X_grid = np.arange(min(X), max(X), 0.1)
X_grid = X_grid.reshape((len(X_grid), 1))
plt.scatter(X, y, color = 'red')
plt.scatter(X, y_pred, color = 'green')
plt.plot(X_grid, lin_reg.predict(poly_reg.fit_transform(X_grid)), color = 'black')
plt.title('Polynomial Regression')
plt.xlabel('Position level')
plt.ylabel('Salary')
plt.show()

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

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



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

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

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