Регрессионный анализ используется для количественной оценки взаимосвязи между одной или несколькими независимыми переменными и переменной отклика.
Наиболее распространенным типом регрессионного анализа является простая линейная регрессия , которая используется, когда переменная-предиктор и переменная-отклик имеют линейную связь.
Однако иногда связь между переменной-предиктором и переменной-ответом нелинейна.
Например, истинное отношение может быть квадратичным:
Или он может быть кубическим:
В этих случаях имеет смысл использовать полиномиальную регрессию , которая может учитывать нелинейную связь между переменными.
В этом руководстве объясняется, как выполнить полиномиальную регрессию в 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()
Мы можем получить подобранное уравнение полиномиальной регрессии, напечатав коэффициенты модели:
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% вариации переменной отклика можно объяснить предикторными переменными.