Как выполнить полиномиальную регрессию в Python

Как выполнить полиномиальную регрессию в Python

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

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

Однако иногда связь между переменной-предиктором и переменной-ответом нелинейна.

Например, истинное отношение может быть квадратичным:

Или он может быть кубическим:

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

В этом руководстве объясняется, как выполнить полиномиальную регрессию в Python.

Пример: полиномиальная регрессия в Python

Предположим, у нас есть следующая предикторная переменная (x) и переменная ответа (y) в Python:

x = [2, 3, 4, 5, 6, 7, 7, 8, 9, 11, 12]
y = [18, 16, 15, 17, 20, 23, 25, 28, 31, 30, 29]

Если мы создадим простую диаграмму рассеяния этих данных, мы увидим, что связь между x и y явно нелинейна:

import matplotlib.pyplot as plt

#create scatterplot 
plt.scatter(x, y)

Таким образом, не имеет смысла подгонять к этим данным модель линейной регрессии. Вместо этого мы можем попытаться подобрать модель полиномиальной регрессии со степенью 3, используя функцию numpy.polyfit() :

import numpy as np

#polynomial fit with degree = 3
model = np.poly1d(np.polyfit(x, y, 3))

#add fitted polynomial line to scatterplot
polyline = np.linspace(1, 12, 50)
plt.scatter(x, y)
plt.plot(polyline, model(polyline))
plt.show() 
Линия полиномиальной регрессии в Python

Мы можем получить подобранное уравнение полиномиальной регрессии, напечатав коэффициенты модели:

print(model)

poly1d([ -0.10889554, 2.25592957, -11.83877127, 33.62640038])

Подходящее уравнение полиномиальной регрессии:

у = -0,109 х 3 + 2,256 х 2 – 11,839 х + 33,626

Это уравнение можно использовать для нахождения ожидаемого значения переменной отклика на основе заданного значения объясняющей переменной. Например, предположим, что x = 4. Ожидаемое значение переменной ответа y будет следующим:

у = -0,109(4) 3 + 2,256(4) 2 – 11,839(4) + 33,626= 15,39 .

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

#define function to calculate r-squared
def polyfit(x, y, degree):
 results = {}
 coeffs = numpy.polyfit(x, y, degree)
 p = numpy.poly1d(coeffs)
 #calculate r-squared
 yhat = p(x)
 ybar = numpy.sum(y)/len(y)
 ssreg = numpy.sum((yhat-ybar)\*\*2)
 sstot = numpy.sum((y - ybar)\*\*2)
 results['r_squared'] = ssreg / sstot

 return results

#find r-squared of polynomial model with degree = 3
polyfit(x, y, 3)

{'r_squared': 0.9841113454245183}

В этом примере R-квадрат модели равен 0,9841.Это означает, что 98,41% вариации переменной отклика можно объяснить предикторными переменными.

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.