Maskinlæring - lineær regression
- Forrige Side Dispersionsdiagram
- Næste Side Polynomial Regression
Regression
Når du forsøger at finde forholdet mellem variabler, bruges terminen 'regression' (tilbagegang).
I maskinlæring og statistisk modellering bruges dette forhold til at forudsige resultaterne af fremtidige begivenheder.
Lineær regression
Lineær regression tegner en linje gennem datapunkternes relationer mellem alle datapunkter.
Denne linje kan bruges til at forudsige fremtidige værdier.

I maskinlæring er det vigtigt at forudsige fremtiden.
Arbejdsprincippet
Python tilbyder nogle metoder til at finde forholdet mellem datapunkter og tegne lineær regression linje. Vi vil vise dig, hvordan du bruger disse metoder i stedet for gennem matematiske formler.
I det følgende eksempel repræsenterer x-akslen bilens alder, og y-akslen hastigheden. Vi har registreret alderen og hastigheden for 13 biler, der har passet gennem en betalingsstation. Lad os se, om de indsamlede data kan bruges til lineær regression:
Eksempel
Tegn først punktplot:
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()
Resultat:

Eksempel
importér scipy
og tegn lineær regression linje:
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()
Resultat:

Eksempel Forklaring
Importér de nødvendige moduler:
import matplotlib.pyplot as plt from scipy import stats
Opret et array, der repræsenterer værdierne på x- og y-akslen:
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]
Udfør en metode, der returnerer nogle vigtige nøgleværdier for lineær regression:
slope, intercept, r, p, std_err = stats.linregress(x, y)
Opret en, der bruger slope
og intercept
Værdifunktionen returnerer nye værdier. Denne nye værdi repræsenterer placeringen af den tilsvarende x-værdi på y-akslen:
def myfunc(x): return slope * x + intercept
Kør hver værdi i x-værdiarrangementet gennem funktionen. Dette vil skabe et nyt array, hvor y-akslen har nye værdier:
mymodel = list(map(myfunc, x))
Tegn den oprindelige punktplot:
plt.scatter(x, y)
Tegn en lineær regression linje:
plt.plot(x, mymodel)
Vis diagram:
plt.show()
R-Squared
Det er vigtigt at vide, hvor godt værdierne på x-akslen og y-akslen er relateret til hinanden, for uden relation kan lineær regression ikke bruges til at forudsige noget.
Forholdet måles ved en værdi kaldet r-square (r-kvadrat).
R-square værdien varierer fra 0 til 1, hvor 0 betyder ikke relateret, mens 1 betyder 100% relateret.
Python og Scipy-modulerne vil beregne denne værdi for dig, og du skal blot levere x- og y-værdierne til dem:
Eksempel
Hvordan passer mine data til i lineær regression?
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)
Kommentarer:Resultatet -0.76 indikerer, at der er en vis relation, men ikke en perfekt relation, men det indikerer, at vi kan bruge lineær regression i fremtidige forudsigelser.
Forudsige fremtidige værdier
Nu kan vi bruge den indsamlede information til at forudsige fremtidige værdier.
For eksempel: Lad os prøve at forudsige hastigheden for en bil med 10 års alder.
Derfor har vi brug for det samme som i det tidligere eksempel myfunc()
Funktion:
def myfunc(x): return slope * x + intercept
Eksempel
Forudsæt en bil med 10 års alder for hastighed:
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)
Forudsigelseshastigheden er 85.6, og vi kan også læse det af diagrammet:

Dårlig pasform?
Lad os oprette et eksempel, hvor lineær regression 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 lineær regression:
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()
Resultat:

og r-squared værdien?
Eksempel
Du bør have fået en meget lav r-squared værdi.
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)
Resultat: 0.013 betyder dårlig relation og fortæller os, at datamængden ikke er egnet til lineær regression.
- Forrige Side Dispersionsdiagram
- Næste Side Polynomial Regression