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

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

В этой статье мы собираемся обсудить следующие моменты полиномиальной регрессии:

  • Что такое полиномиальная регрессия?
  • Почему мы используем полиномиальную регрессию?
  • Линейная регрессия против полиномиальной регрессии

Что такое полиномиальная регрессия?

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

Чтобы понять его работу, мы можем взять пример набора данных с двумя переменными, где X — независимая, а Y — зависимая переменная. Здесь, когда мы загружаем данные в модель, мы преобразуем входную переменную в полиномиальные члены, используя степень n, затем мы находим X⁰, X¹, X²…..X^n, и эти полиномиальные члены помогают интерпретировать нелинейную зависимость между переменными. Математика модели полиномиальной регрессии аналогична линейной регрессии, и математически уравнение полиномиальной регрессии может быть представлено как

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

Правильную степень многочлена можно найти двумя способами:

  • Прямой выбор: используя этот метод, мы увеличиваем степень до тех пор, пока не найдем наиболее подходящую модель или оптимальную модель.
  • Обратный отбор: используя этот метод, мы уменьшаем степень до тех пор, пока не найдем наиболее подходящую или оптимальную модель.

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

Допущения полиномиальной регрессии

  • Поведение зависимой переменной должно быть зависимым (линейным, криволинейным, аддитивным и т. д.) от связи между зависимой и независимой переменными.
  • Независимые переменные должны быть независимы друг от друга.
  • Ошибки должны быть независимыми и нормально распределенными с постоянной дисперсией и нулевым средним.

Примечание: когда степень полинома в полиномиальной регрессии равна единице, модель сравнима с моделью линейной регрессии.

Почему мы используем полиномиальную регрессию?

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

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

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

Используя эту модель, мы спрогнозировали заработную плату 6,5-летних опытных сотрудников. Там, где мы находим, что модель предсказывает, что это где-то между 40 000 и 60 000. Но, глядя на точки данных, мы можем легко сказать, что это около 20 000. Чтобы восполнить это отставание в прогнозировании, мы используем модели полиномиальной регрессии.

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

Линейная регрессия против полиномиальной регрессии

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

импортировать numpy как np

X = np.arange(0, 13, 0,1).reshape(-1, 1)

Y = np.sin(X).ravel()

печать(X)

Выход:

Здесь, выше, мы сделали данные в форме синуса, чтобы обе переменные могли следовать приведенному ниже соотношению.

Y = sin(X)

Эти переменные не имеют линейной зависимости. Давайте построим данные, чтобы убедиться в этом.

импортировать matplotlib.pyplot как plt

plt.figure(1)

plt.axhline(y=0, color=’k’)

plt.grid(True)

plt.scatter(X,Y, цвет = ‘синий’)

plt.show

Выход:

Здесь мы видим, что сгенерированные нами данные следуют синусоидальной форме. Теперь давайте разделим данные на тестовые и обучающие данные.

из sklearn.model_selection импорта train_test_split

X_train, X_test, y_train, y_test = train_test_split(X,Y, test_size = 0,2, random_state = 42)

Теперь давайте подгоним модель линейной регрессии и проверим производительность.

из sklearn.metrics импортировать r2_score

из sklearn.linear_model импортировать линейную регрессию

model1 = LinearRegression().fit(X_train,y_train)

y_pred = model1.predict(X_test)

print(r2_score(y_test,y_pred))

Выход:

Здесь мы видим, что при использовании этой модели мы получили плохое значение R-квадрата и RMSE. давайте построим прогнозы модели.

plt.plot(X_test,y_pred, color = ‘g’)

plt.plot(X_test, y_test, «b.»)

Выход:

В приведенном выше примере мы ясно видим, насколько плохо линейная регрессия работает с нашими данными.

Теперь давайте смоделируем данные с помощью полиномиальной регрессии.

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

Начнем процедуру с преобразования данных.

из sklearn.preprocessing import PolynomialFeatures

poly = PolynomialFeatures(степень = 5, include_bias = True)

X_train_transf = poly.fit_transform(X_train)

X_test_transf = poly.transform(X_test)

Давайте подгоним модель линейной регрессии к преобразованным данным и проверим производительность.

model2 = LinearRegression().fit(X_train_transf,y_train)

y_pred = model2.predict(X_test_transf)

print('R-square score=›',r2_score(y_test,y_pred))

print('RMSE для полиномиальной регрессии=›',np.sqrt(mean_squared_error(y_test,y_pred)))

Выход:

Здесь мы видим, что наше значение R-квадрата также улучшилось за счет минимизации RMSE для этого типа регрессии. Давайте построим результаты.

plt.plot(X_test, y_pred, "r.", linewidth=2, label="Прогнозы")

plt.plot(X_test, y_test, «b.»)

plt.xlabel('Предсказания',fontsize=12)

plt.ylabel('Цель',fontsize=12)

plt.legend([‘предсказания’,’оригинал’])

Выход:

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

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

X_test = np.arange(0, 8, 0,1).reshape(-1, 1)

Y_test = np.sin(X_test).ravel()

poly = PolynomialFeatures(степень = 5, include_bias = True)

X_test_trans = poly.fit_transform(X_test)

y_pred_new = model2.predict(X_test_trans)

Давайте снова построим прогнозные и фактические значения.

plt.plot(X_test, y_pred_new, "r.", linewidth=2, label="Прогнозы")

plt.plot(X_test, Y_test, «b.»)

plt.xlabel('Предсказания',fontsize=12)

plt.ylabel('Цель',fontsize=12)

plt.legend([‘предсказания’,’оригинал’])

Выход:

Глядя на приведенные выше сценарии, мы можем сказать, что наша линейная модель улучшена по сравнению с моделями плоской линейной регрессии.

Заключительные слова

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

Рекомендации