Полиномиальная регрессия в 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
Перевод и адаптация: Дмитрий Каленов