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