Jak wykonać regresję wielomianową w pythonie


Analizę regresji stosuje się do ilościowego określenia związku między jedną lub większą liczbą zmiennych objaśniających a zmienną odpowiedzi.

Najpopularniejszym rodzajem analizy regresji jest prosta regresja liniowa , stosowana, gdy zmienna predykcyjna i zmienna odpowiedzi mają liniową zależność.

Czasami jednak związek między zmienną predykcyjną a zmienną odpowiedzi jest nieliniowy.

Na przykład prawdziwa zależność może być kwadratowa:

Lub może być sześcienny:

W takich przypadkach sensowne jest zastosowanie regresji wielomianowej , która może wyjaśnić nieliniową zależność między zmiennymi.

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

Przykład: regresja wielomianowa w Pythonie

Załóżmy, że w Pythonie mamy następującą zmienną predykcyjną (x) i zmienną odpowiedzi (y):

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

Jeśli utworzymy prosty wykres rozrzutu tych danych, zobaczymy, że związek między x i y wyraźnie nie jest liniowy:

 import matplotlib.pyplot as plt

#create scatterplot 
plt.scatter(x, y)

Dopasowanie modelu regresji liniowej do tych danych nie miałoby zatem sensu. Zamiast tego możemy spróbować dopasować model regresji wielomianowej o stopniu 3 za pomocą funkcji 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() 

Linia regresji wielomianowej w Pythonie

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

 print(model)

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

Dopasowane równanie regresji wielomianowej to:

y = -0,109x 3 + 2,256x 2 – 11,839x + 33,626

Równanie to można wykorzystać do znalezienia oczekiwanej wartości zmiennej odpowiedzi przy danej wartości zmiennej objaśniającej.

Załóżmy na przykład, że x = 4. Oczekiwana wartość zmiennej odpowiedzi y będzie wynosić:

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

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

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

Oznacza to, że 98,41% zmienności zmiennej odpowiedzi można wyjaśnić zmiennymi predykcyjnymi.

Dodaj komentarz

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