На предыдущих уроках мы обсуждали задачи, которые можно смоделировать с помощью прямой линии. Эти модели были названы «линейными» регрессионными моделями и хорошо работали с распределениями данных, которые демонстрировали линейную зависимость.
Однако не все проблемы на практике следуют линейной модели. В этой главе мы обсудим полиномиальную регрессию, чтобы подобрать линию для точек данных, между которыми существует нелинейная связь.
Что такое полиномиальная регрессия?
Полиномиальная регрессия – это подход к моделированию нелинейной зависимости между независимой переменной (x) и зависимой переменной (y) с использованием n-го полином степени x.
Если x — независимая переменная, а y — зависимая переменная, модель полиномиальной регрессии представляется как
где y — зависимая переменная, x — независимая переменная, (w1, w2, w3, …, wn) — веса, b — смещение или точка пересечения, а n — положительное целое число.
Полиномиальную регрессию можно рассматривать как частный случай модели множественной линейной регрессии, в которой каждая независимая переменная является полиномом n-йстепени от одной независимой переменной. Поэтому его также иногда называют полиномиальной линейной регрессией.
(Примечание. Процесс обучения модели полиномиальной регрессии такой же, как и модели простой линейной регрессии.)
Полиномиальная регрессия в Python
Мы обсудили, почему используется полиномиальная регрессия. Теперь мы рассмотрим пошаговую реализацию алгоритма на Python. Прежде чем мы начнем разрабатывать модель и разбираться в ней, давайте импортируем некоторые необходимые библиотеки Python.
1. Импорт необходимых библиотек
Во-первых, давайте импортируем некоторые необходимые библиотеки Python.
# Importing necessary libraries import numpy as np # for array operations import matplotlib.pyplot as plt # for data visualization %matplotlib inline # scikit-learn for model building and validation from sklearn.linear_model import LinearRegression # for building the model from sklearn.metrics import mean_squared_error # for calculating the cost function # Importing libraries for polynomial feature transformation from sklearn.preprocessing import PolynomialFeatures # For creating a pipeline from sklearn.pipeline import Pipeline
2. Создание набора данных
Для этого урока мы создадим фиктивный набор данных, который следует криволинейной зависимости, используя NumPy.
# Seeding the NumPy random number generator np.random.seed(20) # Creating a dummy dataset with curvilinear relationship using NumPy x = 20 * np.random.normal(0, 1, 40) y = 5*(-x**2) + np.random.normal(-80, 80, 40)
Давайте построим набор данных и посмотрим на взаимосвязь между переменными.
# Plotting the dataset plt.figure(figsize = (10, 5)) plt.scatter(x, y, s = 15) plt.xlabel('Predictor') plt.ylabel('Target') plt.show()
3. Использование модели линейной регрессии для данных
Мы видели, что данные не подчиняются линейной зависимости. Однако давайте все же попробуем подобрать данные с помощью линейной регрессии и посмотрим, как работает модель.
# Initializing and training the Linear Regression model model_lr = LinearRegression() model_lr.fit(x.reshape(-1, 1), y.reshape(-1, 1)) # Predicting the values from the model y_pred_lr = model_lr.predict(x.reshape(-1, 1)) # Plotting the predictions plt.figure(figsize=(10, 5)) plt.scatter(x, y, s = 15) plt.plot(x, y_pred_lr, color='r', label='Linear Regression') plt.xlabel('Predictor') plt.ylabel('Target') plt.show()
Кроме того, расчет потери RMSE для модели линейной регрессии.
rmse = float(format(np.sqrt(mean_squared_error(y, y_pred_lr)), '.3f')) print("\nRMSE for Linear Regression: ", rmse) OUTPUT: RMSE for Linear Regression: 3374.525
Следовательно, мы можем ясно видеть, что использование модели линейной регрессии для всех типов данных не дает желаемых результатов. Линия не моделирует отношения между переменными, поэтому потери огромны.
4. Использование модели полиномиальной регрессии для данных
Давайте теперь посмотрим, как модель полиномиальной регрессии работает для этого набора данных.
Модуль PolynomialFeatures() из scikit-learn преобразует один независимый признак x в полиномиальные признаки n-йстепени (т. е. x1, x2,вплоть до nстепеней), чтобы мы могли использовать модель линейной регрессии для данных.
# Creating pipeline and fitting it on data input_features = [('polynomial', PolynomialFeatures(degree = 4)), ('modal', LinearRegression())] model_poly = Pipeline(input_features) model_poly.fit(x.reshape(-1,1), y.reshape(-1,1)) OUTPUT: Pipeline(memory=None, steps=[('polynomial', PolynomialFeatures(degree=4, include_bias=True, interaction_only=False)), ('modal', LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False))])
Здесь мы устанавливаем степень равной 4, так как нам нужны полиномиальные признаки 4-й степени.
Теперь давайте предскажем целевые значения и визуализируем результаты, нанеся на график контрольные точки и прогнозы, чтобы узнать, насколько хорошо работает модель.
# Predicting the values poly_pred = model_poly.predict(x.reshape(-1,1)) # sorting the predicted values with respect to the variable sorted_zip = sorted(zip(x, poly_pred)) # * is used to unzip the sorted zipped list x_poly, y_pred_poly = zip(*sorted_zip) # Plotting the predictions plt.figure(figsize=(10,6)) plt.scatter(x, y, s=15) plt.plot(x_poly, y_pred_poly, color='g', label='Polynomial Regression') plt.xlabel('Predictor') plt.ylabel('Target') plt.legend() plt.show()
Кроме того, расчет потери RMSE для модели полиномиальной регрессии.
# RMSE (Root Mean Square Error) rmse = float(format(np.sqrt(mean_squared_error(y, poly_pred)), '.3f')) print("\nRMSE for Polynomial Regression: ", rmse) OUTPUT: RMSE for Polynomial Regression: 78.021
Для сравнения мы видим, что модель полиномиальной регрессии работает очень хорошо и правильно соответствует шаблону данных. Из-за этого мы также можем видеть, что показатель ошибки для полиномиальной регрессии намного меньше, чем у модели линейной регрессии.
Собираем все вместе
Окончательный код для реализации полиномиальной регрессии в Python выглядит следующим образом.
# Importing necessary libraries import numpy as np # for array operations import matplotlib.pyplot as plt # for data visualization %matplotlib inline # scikit-learn for model building and validation from sklearn.linear_model import LinearRegression # for building the model from sklearn.metrics import mean_squared_error # for calculating the cost function # Importing libraries for polynomial feature transformation from sklearn.preprocessing import PolynomialFeatures # For creating a pipeline from sklearn.pipeline import Pipeline # Seeding the NumPy random number generator np.random.seed(20) # Creating a dummy dataset with curvilinear relationship using NumPy x = 20 * np.random.normal(0, 1, 40) y = 5*(-x**2) + np.random.normal(-80, 80, 40) # Creating pipeline and fitting it on data input_features = [('polynomial', PolynomialFeatures(degree = 4)), ('modal', LinearRegression())] model_poly = Pipeline(input_features) model_poly.fit(x.reshape(-1,1), y.reshape(-1,1)) # Predicting the values poly_pred = model_poly.predict(x.reshape(-1,1)) # sorting the predicted values with respect to the variable sorted_zip = sorted(zip(x, poly_pred)) x_poly, y_pred_poly = zip(*sorted_zip) # Plotting the predictions plt.figure(figsize=(10,6)) plt.scatter(x, y, s=15) plt.plot(x_poly, y_pred_poly, color='g', label='Polynomial Regression') plt.xlabel('Predictor') plt.ylabel('Target') plt.legend() plt.show() # RMSE (Root Mean Square Error) rmse = float(format(np.sqrt(mean_squared_error(y, poly_pred)), '.3f')) print("\nRMSE for Polynomial Regression: ", rmse)
В этом уроке мы узнали о полиномиальной регрессии вместе с ее реализацией в Python.
Вы хотите изучать Python, науку о данных и машинное обучение во время получения сертификата? Вот несколько самых продаваемых курсов Udemy, на которые мы рекомендуем вам записаться:
- 2021 Complete Python Bootcamp From Zero to Hero in Python — уже зачислено более 1 000 000 студентов!
- Python для Data Science and Machine Learning Bootcamp — уже зачислено более 400 000 студентов!
- Полное руководство по TensorFlow для глубокого обучения с помощью Python — уже зачислено более 90 000 студентов!
- Учебный курс по науке о данных и машинному обучению с R — уже зачислено более 70 000 студентов!
- Полный курс SQL Bootcamp 2021: от нуля до героя — уже зачислено более 400 000 студентов!
Отказ от ответственности. Когда вы совершаете покупку по приведенным выше ссылкам, мы можем получать комиссию в качестве партнера.
Первоначально опубликовано на https://www.theclickreader.com.