Maskinlæring - polynomiel regression
- Forrige Side Lineær Regression
- Næste Side Multivariat Regression
Polynomregression (Polynomial Regression)
Hvis dine data punkter åbenlyst ikke passer til lineær regression (en linje, der går gennem data punkterne), kan polynomregression være det ideelle valg.
Som lineær regression bruger polynomregression forholdet mellem variablerne x og y til at finde den bedste metode til at tegne linjen til data punkterne.

Arbejdsmekanisme
Python har nogle metoder til at finde relationer mellem data punkter og tegne polynomregression linjer. Vi vil vise dig, hvordan du bruger disse metoder i stedet for gennem matematiske formler.
I det følgende eksempel har vi registreret 18 biler, der er gået gennem en bestemt betalingsstation.
Vi har allerede registreret hastigheden af biler og tidspunktet for passagen (timer).
x-aksen repræsenterer timen på dagen, y-aksen repræsenterer hastigheden:
Eksempel
Først tegn punkt diagram:
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()
Resultat:

Eksempel
importere numpy
og matplotlib
og tegn derefter polynomregression linje:
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()
Resultat:

Eksempel Forklaring
Importer de nødvendige moduler:
import numpy import matplotlib.pyplot as plt
Opret arrayer, der repræsenterer værdierne på x- og y-aksen:
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 har en metode, der lader os oprette et polynommodel:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Så specificer visningens rækkevidde, vi starter fra position 1 og slutter ved position 22:
myline = numpy.linspace(1, 22, 100)
Tegn oprindelige punkt diagram:
plt.scatter(x, y)
Tegn polynomregression linje:
plt.plot(myline, mymodel(myline))
Vis diagram:
plt.show()
R-Squared
Det er vigtigt at vide, hvor godt værdierne på x- og y-aksen er relateret, for uden en relation kan polynomregression ikke bruges til at forudsige noget.
Forholdet mellem værdierne på x- og y-aksen måles ved en værdi kaldet r-kvadrat (r-squared).
R-kvadratets rækkevidde er 0 til 1, hvor 0 betyder ikke-korrigeret, mens 1 betyder 100% korreleret.
Python og Sklearn-modulerne vil beregne denne værdi for dig. Alt, du skal gøre, er at indtaste x- og y-arrayene:
Eksempel
Hvordan passer min data til polynomregression?
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)))
Kommentar:Resultatet 0.94 indikerer, at der er en god relation, og vi kan bruge polynomregression i fremtidige forudsigelser.
Forudsige fremtidige værdier
Nu kan vi bruge de indsamlede oplysninger til at forudsige fremtidige værdier.
For eksempel: lad os prøve at forudsige hastigheden af biler, der passerer gennem en betalingsstation omkring kl. 17:
Derfor har vi brug for det samme som i eksemplet ovenfor: mymodel Array:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Eksempel
Forudsæt hastigheden af bilen efter kl. 17:
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)
Forudsigelseshastigheden er 88.87, og vi kan også se det i diagrammet:

Dårlig pasform?
Lad os oprette et eksempel, hvor polynomregression ikke er den bedste metode til at forudsige fremtidige værdier.
Eksempel
Disse værdier for x- og y-aksen vil føre til en meget dårlig tilpasning af polynomisk regression:
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()
Resultat:

Hvad er r-squared værdien?
Eksempel
Du bør få en meget lav r-squared værdi.
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)))
Resultat: 0,00995 indikerer en meget dårlig relation og fortæller os, at datasets ikke er egnet til polynomisk regression.
- Forrige Side Lineær Regression
- Næste Side Multivariat Regression