Как выполнить кубическую регрессию в python


Кубическая регрессия — это тип регрессии, который мы можем использовать для количественной оценки связи между переменной-предиктором и переменной ответа, когда связь между переменными нелинейна.

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

Пример: кубическая регрессия в Python

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

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' x ': [6, 9, 12, 16, 22, 28, 33, 40, 47, 51, 55, 60],
                   ' y ': [14, 28, 50, 64, 67, 57, 55, 57, 68, 74, 88, 110]})

#view DataFrame
print (df)

     xy
0 6 14
1 9 28
2 12 50
3 16 64
4 22 67
5 28 57
6 33 55
7 40 57
8 47 68
9 51 74
10 55 88
11 60 110

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

 import matplotlib. pyplot as plt

#create scatterplot
plt. scatter (df. x , df. y ) 

По мере увеличения значения x значение y увеличивается до определенной точки, затем уменьшается, а затем снова увеличивается.

Этот образец с двумя «кривыми» на графике указывает на кубическую зависимость между двумя переменными.

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

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

 import numpy as np

#fit cubic regression model
model = np. poly1d (np. polyfit (df. x , df. y , 3))

#add fitted cubic regression line to scatterplot
polyline = np. linspace (1, 60, 50)
plt. scatter (df. x , df. y )
plt. plot (polyline, model(polyline))

#add axis labels
plt. xlabel (' x ')
plt. ylabel (' y ')

#displayplot
plt. show () 

кубическая регрессия в Python

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

 print (model)

          3 2
0.003302x - 0.3214x + 9.832x - 32.01

Подобранное уравнение кубической регрессии:

у = 0,003302(х) 3 – 0,3214(х) 2 + 9,832х – 30,01

Мы можем использовать это уравнение для расчета ожидаемого значения y на основе значения x.

Например, если x равно 30, то ожидаемое значение y равно 64,844:

у = 0,003302(30) 3 – 0,3214(30) 2 + 9,832(30) – 30,01 = 64,844

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

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

    return results

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

{'r_squared': 0.9632469890057967}

В этом примере квадрат R модели равен 0,9632 .

Это означает, что 96,32% вариаций переменной отклика можно объяснить переменной-предиктором.

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

Связанный: Что такое хорошее значение R-квадрата?

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи на Python:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *