Статьи
April 8

Полиномиальная регрессия в sklearn

Полиномиальная регрессия - это форма линейной регрессии, в которой отношение между независимой переменной X и зависимой переменной y моделируется как многочлен n-й степени. Она используется когда отношение между признаками и целевой переменной не является линейным и связь лучше представить в виде кривой.

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

Основная цель регрессии - смоделировать ожидаемое значение зависимой переменной y в зависимости от значения независимой переменной X. В простой линейной регрессии мы используем для этого следующее уравнение:

y = a + bx + e

Где:

  • y - зависимая переменная: переменная, которую мы хотим предсказать;
  • a - константа смещения: точка пересечения линии регрессии с осью y. Значение y, когда X равно 0.
  • b - коэффициент регрессии: наклон линии регрессии. Показывает, насколько y меняется при изменении x на одну единицу.
  • e - случайная ошибка: расстояние между точкой данных и линией регрессии. Неопределенность, не учтенная моделью.

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

Общая форма уравнения полиномиальной регрессии степени n:

Где:

  • y - зависимая переменная: переменная, которую мы хотим предсказать.
  • a - константа смещения: точка пересечения линии регрессии с осью y. Значение y, когда x равно 0.
  • bn - коэффициент регрессии при x: показывает, насколько y меняется при изменении xn на одну единицу.
  • x - независимая переменная: переменная, которая используется для прогнозирования y.
  • n - степень полинома: наивысшая степень x в уравнении.

Выбор степени полинома (n) является ключевым аспектом полиномиальной регрессии. Более высокая степень позволяет модели точнее “подогнаться” к тренировочным данным, но это также может привести к переобучению, особенно если степень слишком высокая. Поэтому необходимо выбирать степень на основе сложности взаимосвязи в данных.

Теоретический пример использования полиномиальной регрессии

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

Применим полиномиальную регрессию для моделирования отношения между годами опыта и зарплатой. Для этого примера мы используем квадратичный многочлен (степень 2).

Уравнение полиномиальной регрессии второй степени:

Зарплата = b0 + b1 × Опыт + b3 × Опыт^2 + e

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

Пример реализация полиномиальной регрессии на Python

Теперь посмотрим, как можно реализовать полиномиальную регрессию в Python. Для начала создадим небольшой датафрейм для примера:

import pandas as pd

df = {
    'sno': [1, 2, 3, 4, 5, 6],
    'Temperature': [0, 20, 40, 60, 80, 100],
    'Pressure': [0.0002, 0.0012, 0.006, 0.03, 0.09, 0.27]
}

df = pd.DataFrame(data)
df
Над датафрейм

В качестве признака выберем температуру, а прогнозировать будем давление:

# Признаки и таргет
X = df.iloc[:, 1:2].values
y = df.iloc[:, 2].values

Инициализируем модель линейной регрессии:

lin = LinearRegression()

lin.fit(X, y)

И визуализируем результаты:

plt.scatter(X, y, color='blue')
 
plt.plot(X, lin.predict(X), color='red')
plt.title('Полиномиальная регрессия')
plt.xlabel('Температура')
plt.ylabel('Давление')
 
plt.show()

Теперь создадим полиномиальные признаки и обучим модель:

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

# Инициализация объекта преобразования полиномиальных признаков
poly = PolynomialFeatures(degree=2)

# Преобразование исходных признаков в полиномиальные 
X_poly = poly.fit_transform(X)
poly.fit(X_poly, y)

# Обучение модели полиномиальной регрессии
lin2 = LinearRegression()
lin2.fit(X_poly, y)

Визуализируем результаты полиномиальной регрессии с использованием точечной диаграммы:

plt.scatter(X, y, color='blue')
plt.plot(X, lin2.predict(poly.fit_transform(X)),
         color='red')
plt.title('Полиномиальная регрессия')
plt.xlabel('Температура')
plt.ylabel('Давление')

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

Однако стоит помнить, что одной из проблем полиномиальной регрессии является переобучение, когда модель слишком точно подгоняется под обучающие данные и не обобщается для предсказаний на новых данных. Этого можно избежать с помощью методов регуляризации, например, таких как L1(Lasso) и L2(Ridge).

Преимущества и недостатки использования полиномиальной регрессии

Преимущества:

  • Может моделировать широкий спектр функций;
  • Позволяет улавливать нелинейные закономерности в данных.

Недостатки:

  • Требует аккуратного выбора степени полинома для избежания переобучения.
  • Вычислительно затратна.
  • Чувствительна к выбросам.

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

PythonTalk в Telegram

Чат PythonTalk в Telegram

🍩 Поддержать канал 🫶

Источник: GeeksForGeeks

Перевод и адаптация: Дмитрий Каленов