Hoe kwadratische regressie uit te voeren in python
Kwadratische regressie is een type regressie dat we kunnen gebruiken om de relatie tussen een voorspellende variabele en een responsvariabele te kwantificeren wanneer de werkelijke relaties kwadratisch zijn, wat er in een grafiek uit kan zien als een „U“ of een omgekeerde „U“.
Dat wil zeggen dat naarmate de voorspellende variabele toeneemt, de responsvariabele de neiging heeft ook toe te nemen, maar na een bepaald punt begint de responsvariabele af te nemen naarmate de voorspellende variabele blijft toenemen.
In deze tutorial wordt uitgelegd hoe u kwadratische regressie in Python uitvoert.
Voorbeeld: kwadratische regressie in Python
Stel dat we gegevens hebben over het aantal gewerkte uren per week en het gerapporteerde geluksniveau (op een schaal van 0 tot 100) voor 16 verschillende mensen:
import numpy as np import scipy.stats as stats #define variables hours = [6, 9, 12, 12, 15, 21, 24, 24, 27, 30, 36, 39, 45, 48, 57, 60] happ = [12, 18, 30, 42, 48, 78, 90, 96, 96, 90, 84, 78, 66, 54, 36, 24]
Als we een eenvoudig spreidingsdiagram van deze gegevens maken, kunnen we zien dat de relatie tussen de twee variabelen een “U”-vorm heeft:
import matplotlib.pyplot as plt
#create scatterplot
plt.scatter(hours, happ)
Naarmate het aantal gewerkte uren toeneemt, neemt het geluk ook toe, maar zodra het aantal gewerkte uren de 35 uur per week overschrijdt, begint het geluk af te nemen.
Vanwege deze „U“-vorm betekent dit dat kwadratische regressie waarschijnlijk een goede kandidaat is om de relatie tussen de twee variabelen te kwantificeren.
Om daadwerkelijk een kwadratische regressie uit te voeren, kunnen we een polynomiaal regressiemodel met een graad van 2 fitten met behulp van de numpy.polyfit() functie :
import numpy as np #polynomial fit with degree = 2 model = np.poly1d(np.polyfit(hours, happ, 2)) #add fitted polynomial line to scatterplot polyline = np.linspace(1, 60, 50) plt.scatter(hours, happ) plt.plot(polyline, model(polyline)) plt.show()
We kunnen de gepaste polynomiale regressievergelijking verkrijgen door de modelcoëfficiënten af te drukken:
print (model)
-0.107x 2 + 7.173x - 30.25
De aangepaste kwadratische regressievergelijking is:
Geluk = -0,107(uren) 2 + 7,173(uren) – 30,25
We kunnen deze vergelijking gebruiken om het verwachte geluksniveau van een individu te berekenen op basis van zijn gewerkte uren. Het verwachte geluksniveau van iemand die 30 uur per week werkt, is bijvoorbeeld:
Geluk = -0,107(30) 2 + 7,173(30) – 30,25 = 88,64 .
We kunnen ook een korte functie schrijven om het R-kwadraat van het model te verkrijgen, wat het deel van de variantie in de responsvariabele is dat kan worden verklaard door de voorspellende variabelen.
#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(hours, happ, 2) {'r_squared': 0.9092114182131691}
In dit voorbeeld is het R-kwadraat van het model 0,9092 .
Dit betekent dat 90,92% van de variatie in gerapporteerde geluksniveaus kan worden verklaard door de voorspellende variabelen.
Aanvullende bronnen
Hoe polynomiale regressie uit te voeren in Python
Hoe kwadratische regressie uit te voeren in R
Hoe kwadratische regressie uit te voeren in Excel