Cursusinhoud
Lineaire Regressie Met Python
Lineaire Regressie Met Python
Overfitting
Overfitting
Beschouw de twee regressielijnen hieronder. Welke is beter?
Volgens de statistieken is de tweede beter. Dan gebruiken we die om nieuwe waarden te voorspellen! We hebben de voorspellingen nodig voor X_new = [0.2,0.5,2.7]
. Maar toen we de werkelijke doelwaarden voor de zojuist voorspelde X_new
kregen, bleek dat het eerste model een veel betere voorspelling had.
Dat komt omdat het tweede model overfit op de trainingsset. Overfitting betekent dat het gebouwde model te complex is, waardoor het perfect past op de trainingsdata, maar het voorspellen van niet eerder geziene gevallen minder goed gaat.
Underfitting
Er is ook nog een ander concept, underfitting. Dit betekent dat het gebouwde model te eenvoudig is, waardoor het zelfs de trainingsdata niet goed benadert. In zulke gevallen zijn de voorspellingen voor onbekende gevallen ook onjuist.
Het is mogelijk om visueel te beoordelen of het model underfit of overfit.
We weten al dat we Meervoudige Lineaire Regressie met veel kenmerken niet kunnen visualiseren. Is er een andere manier om te bepalen of het model overfit of underfit? Die is er inderdaad.
Train-test-splits
We willen weten hoe het model presteert op niet eerder geziene voorbeelden. Daarvoor hebben we niet eerder geziene voorbeelden nodig met de bijbehorende werkelijke doelwaarden. En we hebben alleen werkelijke doelwaarden in de trainingsset. De oplossing is om de trainingsset op te splitsen in twee sets: een trainingsset en een testset.
Nu kunnen we het model bouwen met de trainingsset, de metriekwaarden berekenen op de trainingsset (bekende voorbeelden) en vervolgens de metriekwaarden berekenen op de testset (onbekende voorbeelden).
Het is essentieel om de trainingsset willekeurig te splitsen. Gewoonlijk wil je ongeveer 20-30% van je trainingsset gebruiken als testset, en de overige 70-80% blijft als trainingsset over. Scikit-learn biedt een eenvoudige functie om de set willekeurig te splitsen:
Bijvoorbeeld, om de trainingsset te splitsen in 70% training/30% test, kun je de volgende code gebruiken:
from sklearn.model_selection import train_test_split # import the function
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
Bedankt voor je feedback!