Python -zelfstudie

Python HOME Python-intro Python Aan de slag Python-syntaxis Python-opmerkingen Python-variabelen Python-gegevenstypen Python-nummers Python-casting Python-snaren Python Booleans Python-operators Python-lijsten Python-tupels Python-sets Python-woordenboeken Python Als...Anders Python While-lussen Python voor lussen Python-functies Python Lambda Python-arrays Python-klassen/objecten Python-overerving Python-iterators Python-bereik Python-modules Python-datums Python-wiskunde Python JSON Python RegEx Python PIP Python proberen...Behalve Python-gebruikersinvoer Opmaak van Python-tekenreeksen

Bestandsbehandeling

Python-bestandsafhandeling Python-bestanden lezen Python bestanden schrijven/maken Python bestanden verwijderen

Python-modules

NumPy-zelfstudie Panda walkthrough Scipy-zelfstudie

Python Matplotlib

Matplotlib Intro Matplotlib Aan de slag Matplotlib Pyplot Matplotlib plotten Matplotlib-markeringen Matplotlib-lijn Matplotlib-labels Matplotlib-raster Matplotlib-subplots Matplotlib Scatter Matplotlib-repen Matplotlib-histogrammen Matplotlib-cirkeldiagrammen

Machinaal leren

Beginnen Gemiddelde mediane modus Standaardafwijking percentiel Gegevensdistributie Normale gegevensverdeling Spreidingsplot Lineaire regressie Polynomiale regressie Meervoudige regressie Schaal Trein/Test Beslissingsboom

Python MySQL

MySQL Aan de slag MySQL Database maken MySQL-tabel maken MySQL-invoeging MySQL Select MySQL Waar MySQL Bestel op MySQL verwijderen MySQL-droptabel MySQL-update MySQL-limiet MySQL Join

Python MongoDB

MongoDB Aan de slag MongoDB Database maken MongoDB Verzameling maken MongoDB invoegen MongoDB Zoeken MongoDB-query MongoDB Sorteren MongoDB verwijderen MongoDB Drop-collectie MongoDB-update MongoDB-limiet

Python-referentie

Python-overzicht Ingebouwde functies van Python Python-stringmethoden Methoden voor Python-lijst Python-woordenboekmethoden Python Tuple-methoden Methoden voor Python-sets Python-bestandsmethoden Python-trefwoorden Python-uitzonderingen Python-woordenlijst

Modulereferentie

Willekeurige module Verzoekmodule Statistiekmodule Wiskundige module cMath-module

Python-instructies

Lijstduplicaten verwijderen Een string omkeren Voeg twee nummers toe

Python-voorbeelden

Python-voorbeelden Python-compiler Python-oefeningen Python-quiz Python-certificaat

Machine learning - polynomiale regressie


Polynomiale regressie

Als uw gegevenspunten duidelijk niet passen in een lineaire regressie (een rechte lijn door alle gegevenspunten), kan dit ideaal zijn voor polynomiale regressie.

Polynomiale regressie gebruikt, net als lineaire regressie, de relatie tussen de variabelen x en y om de beste manier te vinden om een ​​lijn door de gegevenspunten te trekken.


Hoe werkt het?

Python heeft methoden om een ​​relatie tussen datapunten te vinden en om een ​​lijn van polynomiale regressie te tekenen. We laten u zien hoe u deze methoden kunt gebruiken in plaats van de wiskundige formule te doorlopen.

In het onderstaande voorbeeld hebben we 18 auto's geregistreerd terwijl ze een bepaald tolhuisje passeerden.

We hebben de snelheid van de auto geregistreerd en het tijdstip (uur) waarop het passeren plaatsvond.

De x-as vertegenwoordigt de uren van de dag en de y-as vertegenwoordigt de snelheid:

Voorbeeld

Begin met het tekenen van een spreidingsplot:

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()

Resultaat:

Voorbeeld

Importeer numpyen matplotlibteken vervolgens de lijn van polynomiale regressie:

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()

Resultaat:

Voorbeeld uitgelegd

Importeer de modules die je nodig hebt.

U kunt meer te weten komen over de NumPy-module in onze NumPy-zelfstudie .

U kunt meer te weten komen over de SciPy-module in onze SciPy-zelfstudie .

import numpy
import matplotlib.pyplot as plt

Maak de arrays die de waarden van de x- en y-as vertegenwoordigen:

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 heeft een methode waarmee we een polynoommodel kunnen maken:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Geef vervolgens op hoe de regel wordt weergegeven, we beginnen op positie 1 en eindigen op positie 22:

myline = numpy.linspace(1, 22, 100)

Teken de originele scatterplot:

plt.scatter(x, y)

Teken de lijn van polynomiale regressie:

plt.plot(myline, mymodel(myline))

Geef het diagram weer:

plt.show()



R-kwadraat

Het is belangrijk om te weten hoe goed de relatie tussen de waarden van de x- en y-as is, als er geen relatie is kan de polynomiale regressie niet gebruikt worden om iets te voorspellen.

De relatie wordt gemeten met een waarde die het r-kwadraat wordt genoemd.

De r-kwadraatwaarde varieert van 0 tot 1, waarbij 0 betekent dat er geen relatie is en 1 100% gerelateerd is.

Python en de Sklearn-module zullen deze waarde voor u berekenen, het enige wat u hoeft te doen is deze te voeden met de x- en y-arrays:

Voorbeeld

Hoe goed passen mijn gegevens in een polynomiale regressie?

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 0,94 laat zien dat er een zeer goede relatie is, en we kunnen polynomiale regressie gebruiken in toekomstige voorspellingen.


Toekomstige waarden voorspellen

Nu kunnen we de informatie die we hebben verzameld gebruiken om toekomstige waarden te voorspellen.

Voorbeeld: Laten we proberen de snelheid te voorspellen van een auto die rond 17 uur de tolpoort passeert:

Om dit te doen, hebben we dezelfde mymodelarray nodig uit het bovenstaande voorbeeld:

mymodel = numpy.poly1d(numpy.polyfit(x, y, 3))

Voorbeeld

Voorspel de snelheid van een passerende auto om 17.00 uur:

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)

Het voorbeeld voorspelde een snelheid van 88,87, wat we ook uit het diagram konden aflezen:


Slechte pasvorm?

Laten we een voorbeeld maken waarin polynomiale regressie niet de beste methode zou zijn om toekomstige waarden te voorspellen.

Voorbeeld

Deze waarden voor de x- en y-as zouden moeten resulteren in een zeer slechte pasvorm voor polynomiale regressie:

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()

Resultaat:

En de r-kwadraat waarde?

Voorbeeld

U zou een zeer lage r-kwadraatwaarde moeten krijgen.

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)))

Het resultaat: 0,00995 geeft een zeer slechte relatie aan en vertelt ons dat deze dataset niet geschikt is voor polynomiale regressie.