Maskininlärning - Polynomregression
- Föregående sida Linjär Regression
- Nästa sida Multivariabel Regression
Polynomregression (Polynomial Regression)
Om dina data punkter tydligt inte passar för linjär regression (en linje som passerar genom data punkterna), kan polynomregression vara ett idealt val.
Liksom linjär regression använder polynomregression förhållandet mellan variablerna x och y för att hitta det bästa sättet att rita linjen genom data punkterna.

Arbetsprincip
Python har några sätt att hitta relationer mellan data punkter och rita polynomregression linjer. Vi kommer att visa hur man använder dessa metoder utan att använda matematiska formler.
I det här exemplet registrerade vi 18 bilar som passerade en specifik avgiftsstation.
Vi har redan registrerat hastigheten för bilar och deras genomgångstid (timmar).
x-axeln representerar timmen på dagen, y-axeln representerar hastigheten:
Exempel
Först rita punktgrafen:
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:

Exempel
importera numpy
och matplotlib
och sedan rita polynomregressionlinjen:
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:

Exempel förklaring
Importera nödvändiga moduler:
import numpy import matplotlib.pyplot as plt
Skapa en array som representerar värdena på x- och y-axlarna:
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 ett sätt att låta oss bygga ett polynommodell:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Sedan specificera hur raderna ska visas, vi börjar vid position 1 och slutar vid position 22:
myline = numpy.linspace(1, 22, 100)
Rita den ursprungliga punktgrafen:
plt.scatter(x, y)
Rita polynomregressionlinjen:
plt.plot(myline, mymodel(myline))
Visa diagram:
plt.show()
R-Squared
Det är viktigt att veta hur bra relationen mellan värdena på x- och y-axlarna är, om det inte finns någon relation kan polynomregression inte användas för att förutsäga något.
Förhållandet mellan värdena på x- och y-axlarna mäts med ett värde som kallas r-kvadrat (r-squared).
R-kvadratets omfattning är 0 till 1, där 0 betyder ingen korrelation och 1 betyder 100% korrelation.
Python och Sklearn-modulen kommer att beräkna detta värde för dig, allt du behöver göra är att mata in x- och y-arrayerna:
Exempel
Hur är passformen för mina data i 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 indikerar att det finns en bra relation, och vi kan använda polynomregression för framtida förutsägelser.
Förutsäga framtida värden
Nu kan vi använda den information vi har samlat in för att förutsäga framtida värden.
Till exempel: låt oss försöka förutsäga hastigheten för bilar som passerar genom en avgiftsstation klockan 17 på kvällen:
För detta behöver vi samma som i det tidigare exemplet: mymodel Array:
mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))
Exempel
Förutsäga hastigheten för fordon som passerar klockan 17 på eftermiddagen:
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)
Prediktionshastigheten är 88.87 för detta exempel, och vi kan också se det i grafen:

Dålig passform?
Låt oss skapa ett exempel där polynomregression inte är det bästa sättet att förutsäga framtida värden.
Exempel
Dessa värden för x- och y-axlarna leder till en mycket dålig passform för polynomregression:
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:

Vad är r-squared-värdet?
Exempel
Du bör få ett mycket lågt r-squared-värde.
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 indikerar en mycket dålig relation och informerar oss om att denna dataset inte är lämplig för polynomregression.
- Föregående sida Linjär Regression
- Nästa sida Multivariabel Regression