Machine Learning - Polynomial Regression
- Previous Page Linear Regression
- Next Page Multiple Regression
Polynoomregressie (Polynomial Regression)
Als uw data-punten duidelijk niet geschikt zijn voor lineaire regressie (een lijn die door de data-punten gaat), dan kan polynoomregressie een ideaal alternatief zijn.
Net als lineaire regressie gebruikt polynoomregressie de relatie tussen de variabelen x en y om de beste methode te vinden om de lijn van de datapunten te tekenen.

Werkingsprincipe
Python biedt enkele methoden om de relatie tussen datapunten te vinden en een polynoomregressielijn te tekenen. We zullen u laten zien hoe u deze methoden kunt gebruiken in plaats van door middel van wiskundige formules.
In onderstaand voorbeeld hebben we 18 auto's geregistreerd die een specifieke tolboog zijn gepasseerd.
We hebben de snelheid en de doorrijtijd (uren) van auto's geregistreerd.
De x-as vertegenwoordigt de uren van de dag, de y-as vertegenwoordigt de snelheid:
Example
Teken eerst het scatterplot:
import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] plt.scatter(x, y) plt.show()
Result:

Example
importeren numpy
en matplotlib
en teken vervolgens de polynoomregressielijn:
import numpy import matplotlib.pyplot as plt x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(1, 22, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
Result:

Voorbeeld uitleg
Importeer de benodigde modules:
import numpy import matplotlib.pyplot as plt
Maak een array die de waarden van de x- en y-as vertegenwoordigt:
x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100]
NumPy biedt een methode om een polynoommodel te bouwen:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Specificeer vervolgens de weergave van de lijn, we beginnen bij positie 1 en eindigen bij positie 22:
myline = numpy.linspace(1, 22, 100)
Teken de oorspronkelijke scatterplot:
plt.scatter(x, y)
Teken de polynoomregressielijn:
plt.plot(myline, mymodel(myline))
Toon grafiek:
plt.show()
R-Squared
Het is belangrijk om te weten hoe goed de waarden van de x- en y-as met elkaar in relatie staan, want zonder relatie kan polynoomregressie niet gebruikt worden om iets te voorspellen.
De relatie wordt gemeten met de waarde van r-kwadraat (r-squared).
De bereik van de r-kwadraatwaarde is van 0 tot 1, waarbij 0 betekent dat er geen relatie is en 1 betekent dat er een 100% relatie is.
Python en de Sklearn-module zullen deze waarde voor u berekenen, u hoeft alleen maar de x- en y-arrays in te voeren:
Example
Hoe goed past mijn data aan in polynoomregressie?
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
Opmerking:Het resultaat van 0.94 geeft aan dat er een goede relatie bestaat, en we kunnen polynoomregressie gebruiken in toekomstige voorspellingen.
Voorspellen van toekomstige waarden
Nu kunnen we gebruik maken van de verzamelde informatie om toekomstige waarden te voorspellen.
Bijvoorbeeld: laten we proberen de snelheid van auto's die omstreeks 17 uur 's avonds door een tolstation rijden te voorspellen:
Daarom hebben we dezelfde voorbeeld zoals hierboven nodig: mymodel Array:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Example
Voorspel de snelheid van auto's om 17 uur 's avonds:
import numpy from sklearn.metrics import r2_score x = [1,2,3,5,6,7,8,9,10,12,13,14,15,16,18,19,21,22] y = [100,90,80,60,60,55,60,65,70,70,75,76,78,79,90,99,99,100] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) speed = mymodel(17) print(speed)
De voorspellingsnelheid van dit voorbeeld is 88.87, wat we ook kunnen zien in de grafiek:

Slechte aanpassing?
Laat ons een voorbeeld maken waarin polynoomregressie niet de beste methode is om toekomstige waarden te voorspellen.
Example
These values for the x and y axes will cause the fit of polynomial regression to be very poor:
import numpy import matplotlib.pyplot as plt x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) myline = numpy.linspace(2, 95, 100) plt.scatter(x, y) plt.plot(myline, mymodel(myline)) plt.show()
Result:

What about the r-squared value?
Example
You should get a very low r-squared value.
import numpy from sklearn.metrics import r2_score x = [89,43,36,36,95,10,66,34,38,20,26,29,48,64,6,5,36,66,72,40] y = [21,46,3,35,67,95,53,72,58,10,26,34,90,33,38,20,56,2,47,15] mymodel = numpy.poly1d(numpy.polyfit(x, y, 3)) print(r2_score(y, mymodel(x)))
Result: 0.00995 indicates a very poor relationship and tells us that the dataset is not suitable for polynomial regression.
- Previous Page Linear Regression
- Next Page Multiple Regression