Machine Learning - Lineaire Regressie
- Previous Page Scatter Plot
- Next Page Polynomial Regression
Regression
When you try to find the relationship between variables, the term 'regression' is used.
In machine learning and statistical modeling, this relationship is used to predict the results of future events.
Lineaire regressie
Lineaire regressie tekent een rechte lijn tussen alle datapunten op basis van de relatie tussen de datapunten.
Deze lijn kan worden gebruikt om toekomstige waarden te voorspellen.

In machine learning is het voorspellen van de toekomst erg belangrijk.
Werkingsprincipe
Python biedt enkele methoden om de relatie tussen datapunten te vinden en de lineaire regressielijn te tekenen. We zullen u laten zien hoe u deze methoden kunt gebruiken in plaats van door middel van wiskundige formules.
In het volgende voorbeeld staat de x-as voor de leeftijd van de auto en de y-as voor de snelheid. We hebben de leeftijd en snelheid van 13 auto's geregistreerd die door de tolpoort zijn gegaan. Laten we zien of de verzamelde gegevens kunnen worden gebruikt voor lineaire regressie:
Example
Teken eerst het scatterplot:
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()
Result:

Example
importeren scipy
en teken de lineaire regressielijn:
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()
Result:

Voorbeeld uitleg
Importeer de benodigde modules:
import matplotlib.pyplot as plt from scipy import stats
Maak een array aan die de waarden van de x- en y-as vertegenwoordigt:
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 een methode uit die enkele belangrijke sleutelwaarden van lineaire regressie retourneert:
slope, intercept, r, p, std_err = stats.linregress(x, y)
Maak een gebruik van slope
en intercept
De waarde van de functie retourneert nieuwe waarden. Deze nieuwe waarde geeft de positie aan waarop de bijbehorende x-waarde op de y-as zal worden geplaatst:
def myfunc(x): return slope * x + intercept
Loop elke waarde van het x-array door de functie. Dit zal een nieuwe array opleveren waarvan de y-as nieuwe waarden heeft:
mymodel = list(map(myfunc, x))
Teken de oorspronkelijke scatterplot:
plt.scatter(x, y)
Teken de lineaire regressielijn:
plt.plot(x, mymodel)
Toon diagram:
plt.show()
R-Squared
Het is belangrijk om te weten hoe goed de waarden op de x-as en y-as met elkaar in relatie staan, want zonder relatie kan lineaire regressie niets voorspellen.
De relatie wordt gemeten met de waarde van r-kwadraat (r-squared).
De range van de r-kwadraatwaarde is van 0 tot 1, waarbij 0 betekent dat er geen relatie is en 1 betekent dat er een 100% relatie is.
Python en de Scipy-module zullen deze waarde voor u berekenen, u hoeft alleen de x- en y-waarden te leveren:
Example
Hoe goed past mijn data in lineaire 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)
Opmerking:Het resultaat -0.76 laat zien dat er een bepaalde relatie is, maar geen perfecte relatie, maar het laat zien dat we lineaire regressie kunnen gebruiken in toekomstige voorspellingen.
Voorspel toekomstige waarden
Nu kunnen we gebruik maken van de verzamelde informatie om toekomstige waarden te voorspellen.
Bijvoorbeeld: laten we proberen de snelheid van een auto met een leeftijd van 10 jaar te voorspellen.
Daarom hebben we hetzelfde nodig als in het vorige voorbeeld: myfunc()
Functie:
def myfunc(x): return slope * x + intercept
Example
Voorspel de snelheid van een auto met een leeftijd van 10 jaar:
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)
De voorspellingsnelheid is 85.6, we kunnen dit ook aflezen uit het diagram:

Slechte fit?
Laten we een voorbeeld maken waarin lineaire regressie niet de beste methode is om toekomstige waarden te voorspellen.
Example
These values for the x and y axes will result in a very poor fit for linear 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()
Result:

and r-squared value?
Example
You should have obtained a very low r-squared value.
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)
Result: 0.013 indicates a very poor relationship and tells us that the dataset is not suitable for linear regression.
- Previous Page Scatter Plot
- Next Page Polynomial Regression