Полиномиальная регрессия в sklearn
Полиномиальная регрессия - это форма линейной регрессии, в которой отношение между независимой переменной X
и зависимой переменной y
моделируется как многочлен n-й степени. Она используется когда отношение между признаками и целевой переменной не является линейным и связь лучше представить в виде кривой.
Как работает полиномиальная регрессия?
Основная цель регрессии - смоделировать ожидаемое значение зависимой переменной y
в зависимости от значения независимой переменной X
. В простой линейной регрессии мы используем для этого следующее уравнение:
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).
Преимущества и недостатки использования полиномиальной регрессии
- Требует аккуратного выбора степени полинома для избежания переобучения.
- Вычислительно затратна.
- Чувствительна к выбросам.
Полиномиальная регрессия является мощным инструментом для моделирования сложных нелинейных отношений между переменными. Однако важно правильно подбирать степень полинома и осторожно следить за переобучением при использовании этого метода.
Источник: GeeksForGeeks
Перевод и адаптация: Дмитрий Каленов