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 - Lineêre regressie


Regressie

Die term regressie word gebruik wanneer jy probeer om die verband tussen veranderlikes te vind.

In Masjienleer, en in statistiese modellering, word daardie verhouding gebruik om die uitkoms van toekomstige gebeure te voorspel.


Lineêre regressie

Lineêre regressie gebruik die verwantskap tussen die datapunte om 'n reguit lyn deur almal te trek.

Hierdie lyn kan gebruik word om toekomstige waardes te voorspel.

In Masjienleer is die voorspelling van die toekoms baie belangrik.


Hoe werk dit?

Python het metodes om 'n verband tussen datapunte te vind en om 'n lyn van lineêre regressie 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 stel die x-as ouderdom voor, en die y-as verteenwoordig spoed. Ons het die ouderdom en spoed van 13 motors geregistreer terwyl hulle by 'n tolstasie verbygery het. Kom ons kyk of die data wat ons ingesamel het in 'n lineêre regressie gebruik kan word:

Voorbeeld

Begin deur 'n spreidingsdiagram te teken:

import matplotlib.pyplot as plt

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

plt.scatter(x, y)
plt.show()

Resultaat:

Voorbeeld

Voer scipyin en trek die lyn van lineêre regressie:

import matplotlib.pyplot as plt
from scipy import stats

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

mymodel = list(map(myfunc, x))

plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

Resultaat:

Voorbeeld Verduidelik

Voer die modules in wat jy benodig.

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

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

import matplotlib.pyplot as plt
from scipy import stats

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

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

Voer 'n metode uit wat 'n paar belangrike sleutelwaardes van lineêre regressie terugstuur:

slope, intercept, r, p, std_err = stats.linregress(x, y)

Skep 'n funksie wat die slopeen interceptwaardes gebruik om 'n nuwe waarde terug te gee. Hierdie nuwe waarde verteenwoordig waar op die y-as die ooreenstemmende x-waarde geplaas sal word:

def myfunc(x):
  return slope * x + intercept

Begin elke waarde van die x-skikking deur die funksie. Dit sal lei tot 'n nuwe skikking met nuwe waardes vir die y-as:

mymodel = list(map(myfunc, x))

Teken die oorspronklike verstrooiingsplot:

plt.scatter(x, y)

Trek die lyn van lineêre regressie:

plt.plot(x, mymodel)

Vertoon die diagram:

plt.show()



R vir Verhouding

Dit is belangrik om te weet hoe die verhouding tussen die waardes van die x-as en die waardes van die y-as is, as daar geen verband is nie, kan die lineêre regressie nie gebruik word om enigiets te voorspel nie.

Hierdie verwantskap - die korrelasiekoëffisiënt - word genoem r.

Die rwaarde wissel van -1 tot 1, waar 0 geen verband beteken nie, en 1 (en -1) 100% verwant beteken.

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

Voorbeeld

Hoe goed pas my data in 'n lineêre regressie?

from scipy import stats

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

print(r)

Let wel: Die resultaat -0.76 toon dat daar 'n verwantskap is, nie perfek nie, maar dit dui aan dat ons lineêre regressie in toekomstige voorspellings kan 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 10 jaar oue motor te voorspel.

Om dit te doen, benodig ons dieselfde myfunc()funksie van die voorbeeld hierbo:

def myfunc(x):
  return slope * x + intercept

Voorbeeld

Voorspel die spoed van 'n 10 jaar oue motor:

from scipy import stats

x = [5,7,8,7,2,17,2,9,4,11,12,9,6]
y = [99,86,87,88,111,86,103,87,94,78,77,85,86]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

speed = myfunc(10)

print(speed)

Die voorbeeld het 'n spoed van 85.6 voorspel, wat ons ook uit die diagram kon lees:


Slegte fiksheid?

Kom ons skep 'n voorbeeld waar lineêre regressie 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 lineêre regressie tot gevolg te hê:

import matplotlib.pyplot as plt
from scipy import stats

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]

slope, intercept, r, p, std_err = stats.linregress(x, y)

def myfunc(x):
  return slope * x + intercept

mymodel = list(map(myfunc, x))

plt.scatter(x, y)
plt.plot(x, mymodel)
plt.show()

Resultaat:

En die rvir verhouding?

Voorbeeld

Jy behoort 'n baie lae rwaarde te kry.

import numpy
from scipy import stats

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]

slope, intercept, r, p, std_err = stats.linregress(x, y)

print(r)

Die resultaat: 0.013 dui op 'n baie slegte verwantskap, en sê vir ons dat hierdie datastel nie geskik is vir lineêre regressie nie.