Jak wykonać regresję sześcienną w pythonie


Regresja sześcienna to rodzaj regresji, którego możemy użyć do ilościowego określenia związku między zmienną predykcyjną a zmienną odpowiedzi, gdy związek między zmiennymi jest nieliniowy.

W tym samouczku wyjaśniono, jak przeprowadzić regresję sześcienną w języku Python.

Przykład: regresja sześcienna w Pythonie

Załóżmy, że mamy następującą ramkę danych pandy, która zawiera dwie zmienne (x i 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

Jeśli zrobimy prosty wykres rozrzutu tych danych, zobaczymy, że związek między dwiema zmiennymi jest nieliniowy:

 import matplotlib. pyplot as plt

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

Wraz ze wzrostem wartości x y wzrasta do pewnego punktu, następnie maleje i ponownie rośnie.

Ten wzór z dwiema „krzywymi” na wykresie wskazuje na sześcienną zależność między dwiema zmiennymi.

Oznacza to, że model regresji sześciennej jest dobrym kandydatem do ilościowego określenia związku między dwiema zmiennymi.

Aby wykonać regresję sześcienną, możemy dopasować model regresji wielomianowej stopnia 3 za pomocą funkcji 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 () 

regresja sześcienna w Pythonie

Dopasowane równanie regresji sześciennej możemy otrzymać drukując współczynniki modelu:

 print (model)

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

Dopasowane równanie regresji sześciennej to:

y = 0,003302(x) 3 – 0,3214(x) 2 + 9,832x – 30,01

Możemy użyć tego równania do obliczenia oczekiwanej wartości y na podstawie wartości x.

Na przykład, jeśli x wynosi 30, wówczas oczekiwana wartość y wynosi 64,844:

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

Możemy również napisać krótką funkcję, aby uzyskać R-kwadrat modelu, który jest proporcją wariancji zmiennej odpowiedzi, którą można wyjaśnić za pomocą zmiennych predykcyjnych.

 #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}

W tym przykładzie kwadrat R modelu wynosi 0,9632 .

Oznacza to, że 96,32% zmienności zmiennej odpowiedzi można wyjaśnić zmienną predykcyjną.

Ponieważ wartość ta jest tak wysoka, mówi nam to, że model regresji sześciennej dobrze określa ilościowo związek między dwiema zmiennymi.

Powiązane: Jaka jest dobra wartość R-kwadrat?

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania w Pythonie:

Jak wykonać prostą regresję liniową w Pythonie
Jak wykonać regresję kwadratową w Pythonie
Jak wykonać regresję wielomianową w Pythonie

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *