Python- tutoriaal

Python TUIS Python Intro Python Begin Python-sintaksis Python-kommentaar Python veranderlikes Python-datatipes Python-nommers Python Casting Python Strings Python Booleans Python-operateurs Python-lyste Python Tuples Python-stelle Python Woordeboeke Python As...Anders Python While Loops Python vir lusse Python-funksies Python Lambda Python-skikkings Python-klasse/-voorwerpe Python Erfenis Python Iterators Python-omvang Python-modules Python-datums Python Wiskunde Python JSON Python RegEx Python PIP Python Probeer ... Behalwe Python-gebruikersinvoer Python String Formatering

Lêerhantering

Python-lêerhantering Python Lees lêers Python Skryf/skep lêers Python verwyder lêers

Python-modules

NumPy Tutoriaal Panda Walkthrough Scipy Tutoriaal

Python Matplotlib

Matplotlib Intro Matplotlib Begin Matplotlib Pyplot Matplotlib Plotte Matplotlib Merkers Matplotlib-lyn Matplotlib-etikette Matplotlib-rooster Matplotlib Subplotte Matplotlib Scatter Matplotlib Bars Matplotlib Histogramme Matplotlib sirkeldiagramme

Masjienleer

Aan die gang kom Gemiddelde mediaanmodus Standaard afwyking Persentiel Dataverspreiding Normale dataverspreiding Strooi plot Lineêre regressie Polinoomregressie Meervoudige regressie Skaal Trein/toets Besluitboom

Python MySQL

MySQL Begin MySQL Skep databasis MySQL Skep tabel MySQL-insetsel MySQL Kies MySQL Waar MySQL Bestel deur MySQL verwyder MySQL Drop Table MySQL-opdatering MySQL-limiet MySQL Sluit aan

Python MongoDB

MongoDB Begin MongoDB Skep databasis MongoDB Skep versameling MongoDB-insetsel MongoDB Vind MongoDB-navraag MongoDB Sorteer MongoDB verwyder MongoDB Drop Collection MongoDB-opdatering MongoDB-limiet

Python-verwysing

Python Oorsig Python ingeboude funksies Python-stringmetodes Python Lys Metodes Python Woordeboek Metodes Python Tuple Metodes Python Stel metodes Python-lêermetodes Python sleutelwoorde Python-uitsonderings Python Woordelys

Moduleverwysing

Ewekansige module Versoeke Module Statistiek Module Wiskunde Module cMath-module

Python Hoe om

Verwyder lys duplikate Draai 'n snaar om Voeg twee getalle by

Python voorbeelde

Python voorbeelde Python-samesteller Python-oefeninge Python Vasvra Python-sertifikaat

Masjienleer - Polinoomregressie


Polinoomregressie

As jou datapunte duidelik nie 'n lineêre regressie sal pas nie ('n reguit lyn deur alle datapunte), kan dit ideaal wees vir polinoomregressie.

Polinomiale regressie, soos lineêre regressie, gebruik die verwantskap tussen die veranderlikes x en y om die beste manier te vind om 'n lyn deur die datapunte te trek.


Hoe werk dit?

Python het metodes om 'n verband tussen datapunte te vind en om 'n lyn van polinoomregressie te trek. Ons sal jou wys hoe om hierdie metodes te gebruik in plaas daarvan om deur die wiskundige formule te gaan.

In die voorbeeld hieronder het ons 18 motors geregistreer terwyl hulle by 'n sekere tolhuis verby is.

Ons het die motor se spoed geregistreer, en die tyd van die dag (uur) wat die verbyry plaasgevind het.

Die x-as verteenwoordig die ure van die dag en die y-as verteenwoordig die spoed:

Voorbeeld

Begin deur 'n spreidingsdiagram te teken:

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

Voer numpyin en matplotlibtrek dan die lyn van polinoomregressie:

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 Verduidelik

Voer die modules in wat jy benodig.

Jy kan meer oor die NumPy-module leer in ons NumPy-tutoriaal .

Jy kan meer oor die SciPy-module leer in ons SciPy-tutoriaal .

import numpy
import matplotlib.pyplot as plt

Skep die skikkings wat die waardes van die x- en y-as verteenwoordig:

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 het 'n metode waarmee ons 'n polinoommodel kan maak:

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

Spesifiseer dan hoe die lyn sal vertoon, ons begin by posisie 1, en eindig by posisie 22:

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

Teken die oorspronklike verspreidingsgrafiek:

plt.scatter(x, y)

Trek die lyn van polinoomregressie:

plt.plot(myline, mymodel(myline))

Vertoon die diagram:

plt.show()



R-kwadraat

Dit is belangrik om te weet hoe goed die verwantskap tussen die waardes van die x- en y-as is, as daar geen verwantskap is nie, kan die polinoomregressie nie gebruik word om enigiets te voorspel nie.

Die verwantskap word gemeet met 'n waarde wat die r-kwadraat genoem word.

Die r-kwadraatwaarde wissel van 0 tot 1, waar 0 geen verwantskap beteken nie, en 1 beteken 100% verwant.

Python en die Sklearn-module sal hierdie waarde vir jou bereken, al wat jy hoef te doen is om dit met die x- en y-skikkings te voer:

Voorbeeld

Hoe goed pas my data in 'n polinoomregressie?

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

Let wel: Die resultaat 0.94 toon dat daar 'n baie goeie verwantskap is, en ons kan polinoomregressie in toekomstige voorspellings gebruik.


Voorspel toekomstige waardes

Nou kan ons die inligting wat ons ingesamel het gebruik om toekomstige waardes te voorspel.

Voorbeeld: Kom ons probeer om die spoed van 'n motor wat omstreeks 17:00 by die tolhuis verbyry, te voorspel:

Om dit te doen, benodig ons dieselfde mymodelskikking van die voorbeeld hierbo:

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

Voorbeeld

Voorspel die spoed van 'n motor wat om 17:00 verbyry:

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)

Die voorbeeld het 'n spoed voorspel om 88.87 te wees, wat ons ook uit die diagram kon lees:


Slegte fiksheid?

Kom ons skep 'n voorbeeld waar polinoomregressie nie die beste metode sal wees om toekomstige waardes te voorspel nie.

Voorbeeld

Hierdie waardes vir die x- en y-as behoort 'n baie slegte passing vir polinoomregressie tot gevolg te hê:

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 die r-kwadraatwaarde?

Voorbeeld

Jy behoort 'n baie lae r-kwadraatwaarde te kry.

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

Die resultaat: 0,00995 dui op 'n baie slegte verwantskap, en sê vir ons dat hierdie datastel nie geskik is vir polinoomregressie nie.