Maskininlärning - linjär regression
- Föregående Sida Dispersionsdiagram
- Nästa Sida Polynomregression
Regression
När du försöker hitta relationer mellan variabler används termer som 'regression' (återgång).
I maskininlärning och statistisk modellering används detta förhållande för att förutsäga resultatet av framtida händelser.
Linjär regression
Linjär regression ritar en linje genom att använda förhållandet mellan datapunkterna mellan alla datapunkter.
Denna linje kan användas för att förutsäga framtida värden.

I maskinlärning är det viktigt att förutsäga framtida värden.
Arbetsprincip
Python erbjuder några metoder för att hitta förhållanden mellan datapunkter och rita linjär regressionlinjer. Vi kommer att visa hur du använder dessa metoder istället för matematiska formler.
I följande exempel representerar x-axeln åldern på bilen och y-axeln hastigheten. Vi har registrerat åldern och hastigheten för 13 bilar som passerat en betalstation. Låt oss se om de insamlade data kan användas för linjär regression:
Exempel
Först rita punktserien:
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:

Exempel
importera scipy
och rita linjär regressionlinjen:
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:

Exempel på förklaring
Importera nödvändiga moduler:
import matplotlib.pyplot as plt from scipy import stats
Skapa en array som representerar värden på x- och y-axeln:
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]
Utför en metod som returnerar några viktiga nyckelvärden för linjär regression:
slope, intercept, r, p, std_err = stats.linregress(x, y)
Skapa en som använder slope
och intercept
Funktionen för värden returnerar nya värden. Dessa nya värden representerar varje x-värde som kommer att placeras på y-axeln:
def myfunc(x): return slope * x + intercept
Kör varje värde i x-arrays med funktionen. Detta skapar en ny array där y-axeln har nya värden:
mymodel = list(map(myfunc, x))
Rita den ursprungliga punktserien:
plt.scatter(x, y)
Rita linjär regressionlinjen:
plt.plot(x, mymodel)
Visa graf:
plt.show()
R-Squared
Det är viktigt att veta hur bra värdena på x-axeln och y-axeln är relaterade, om det inte finns något förhållande kan linjär regression inte användas för att förutsäga något.
Förhållandet mäts med hjälp av ett värde som kallas r-kvadrat (r-squared).
R-kvadratets intervall är 0 till 1, där 0 innebär ingen korrelation och 1 innebär 100% korrelation.
Python och Scipy-modulen kommer att beräkna detta värde för dig, allt du behöver göra är att tillhandahålla x- och y-värdena för den:
Exempel
Hur passar min data i linjä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)
Kommentar:Resultatet -0.76 indikerar att det finns ett visst förhållande, men inte ett perfekt förhållande, men det visar att vi kan använda linjär regression i 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 en bil med 10 års historia.
För detta behöver vi samma som i föregående exempel myfunc()
Funktion:
def myfunc(x): return slope * x + intercept
Exempel
Förutsäga hastigheten för en bil med 10 års ålder:
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)
Prediktionshastigheten är 85.6, och vi kan också läsa det från grafen:

Dålig passform?
Låt oss skapa ett exempel där linjär regression inte är den bästa metoden för att förutsäga framtida värden.
Exempel
Dessa värden för x- och y-axeln kommer att leda till mycket dålig passform för linjä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:

och r-squared-värdet?
Exempel
Du bör ha fått ett mycket lågt r-squared värde.
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 indikerar mycket dålig relation och talar för att denna datamängd inte är lämplig för linjär regression.
- Föregående Sida Dispersionsdiagram
- Nästa Sida Polynomregression