Ga naar hoofdinhoud

Normale vergelijking voor lineaire regressie – Tutorial

Leer wat de normale vergelijking is en hoe je die kunt gebruiken om machinelearningmodellen te bouwen.
Bijgewerkt 2 okt 2026  · 8 min lezen

Verken met AI

ChatGPTClaudePerplexity

De meeste problemen die we tegenkomen, kun je op meerdere manieren oplossen. Als we bijvoorbeeld van de ene kant van een kamer naar de andere willen gaan, kunnen we om de kamer heen lopen totdat we aan de overkant zijn, of we kunnen er gewoon diagonaal doorheen lopen.

De normale vergelijking onderstreept dit concept. Het is gewoon een andere manier om een probleem op te lossen. Welk probleem, vraag je? Dat behandelen we in de rest van dit artikel. Voor nu is het genoeg om te weten dat het een effectieve aanpak is die je veel tijd kan besparen bij het implementeren van lineaire regressie onder bepaalde voorwaarden.

Laten we dieper duiken…

Wat is de normale vergelijking?

De normale vergelijking is een gesloten-vormoplossing die wordt gebruikt om de waarde van θ te vinden die de kostfunctie voor ordinary least squares lineaire regressie minimaliseert. Een andere manier om de normale vergelijking te beschrijven is als een analytische aanpak om de coëfficiënten te vinden die de verliesfunctie minimaliseren. Beide beschrijvingen kloppen, maar wat betekenen ze precies? 

Lineaire regressie doet een voorspelling, y_hat, door de gewogen som van invoerkenmerken plus een bias-term te berekenen. Wiskundig kun je dit als volgt weergeven:

Waar θ de parameters voorstelt en n het aantal features is.

In wezen gebeurt er in de bovenstaande vergelijking niets anders dan dat het inwendig product van θ en x wordt opgeteld. Een beknoptere manier om dit weer te geven is de gevectoriseerde vorm te gebruiken:

h(θ) is de hypothesefunctie.

Met deze benaderende doelfunctie kunnen we ons model gebruiken om voorspellingen te doen. Om te bepalen of ons model goed heeft geleerd, is het belangrijk dat we de prestaties op de trainingsdata meten. Hiervoor berekenen we een verliesfunctie. Het doel van het trainingsproces is de waarden van theta (θ) te vinden die de verliesfunctie minimaliseren.

Zo kunnen we onze verliesfunctie wiskundig weergeven:

In de bovenstaande vergelijking is theta (θ) een vector van dimensie n + 1, en onze verliesfunctie is een functie van die vectorwaarde. Bijgevolg moet de partiële afgeleide van de verliesfunctie J afzonderlijk worden genomen naar elke parameter θ_j. Ze moeten allemaal gelijk zijn aan nul. Dit proces volgen en alle waarden van θ oplossen van θ_0 tot θ_n levert de waarden van θ op die de verliesfunctie minimaliseren.

De oplossing uitwerken voor de parameters θ_0 tot θ_n met het hierboven beschreven proces leidt tot een zeer bewerkelijke afleiding. Er is inderdaad een snellere oplossing.

Bekijk de formule voor de normale vergelijking:

Waar:

θ → De parameters die de verliesfunctie minimaliseren X → De invoerwaarden van de features voor elk voorbeeld y → De vector met doelwaarden voor elk voorbeeld

De normale vergelijking vs. gradient descent

Hoewel beide methoden proberen de parameters theta (θ) te vinden die de verliesfunctie minimaliseren, verschilt de aanpak sterk tussen de twee oplossingen.

Omdat we in de vorige sectie al hebben uitgelegd hoe de normale vergelijking werkt, stippen we kort gradient descent aan en geven we vervolgens aan waarin de twee technieken verschillen.

Gradient descent

Gradient descent is een van de meest gebruikte algoritmen in machine learning. Het wordt ingezet om iteratief de parameters theta (θ) te vinden die de verliesfunctie minimaliseren.

Het proces begint met het evalueren van de prestaties van het model. Vervolgens wordt de partiële afgeleide van de verliesfunctie berekend, die de helling op het huidige punt aangeeft. Tot slot zetten we stappen evenredig aan de negatieve gradiënt om af te dalen naar het minimum van de verliesfunctie door de huidige set parameters bij te werken – zie de formule hieronder.

Dit proces wordt herhaald totdat er is geconvergeerd naar het minimum van de verliesfunctie.

Waarin verschillen ze?

Het meest opvallende verschil is dat de normale vergelijking analytisch is. Gradient descent is iteratief, wat betekent dat onze parameters geleidelijk worden bijgewerkt tot aan convergentie. Een subtiel verschil dat hiermee samenhangt, is dat gradient descent vereist dat we een learning rate definiëren die de grootte van de stappen richting het minimum bepaalt. De normale vergelijking vereist geen learning rate, omdat we geen iteratieve stappen zetten – we krijgen de resultaten direct.

Bovendien is feature scaling niet vereist wanneer we de aanpak met de normale vergelijking gebruiken; we schalen features doorgaans zodat ze een vergelijkbaar waardebereik hebben. Dit komt doordat gradient descent gevoelig is voor de bereiken van onze datapunten. Als we features niet normaliseren bij gradient descent kan dat scheefheid introduceren in de contourplot van de verliesfunctie, maar de normale vergelijking heeft hier geen last van.

Bepalen wanneer je de normale vergelijking gebruikt

De beste manier om te weten of je de normale vergelijking boven gradient descent moet verkiezen, is door de nadelen te begrijpen.

Het berekenen van de normale vergelijking wordt computationeel uitdagend wanneer het aantal features in onze dataset groot is. De reden is dat om de parameters θ op te lossen, de term (X’ X)^-1 moet worden berekend. X’ X levert een n x n-matrix op, en voor de meeste computerimplementaties groeit de complexiteit van het inverteren van een matrix ongeveer met de derde macht van de dimensie. Dit betekent dat de inverse-bewerking een O(n^3)-tijdcomplexiteit heeft, waardoor de normale vergelijking extreem traag wordt wanneer n zeer groot is – lees meer over tijdcomplexiteit.

Daarom kun je het beste gradient descent gebruiken wanneer het aantal features in de dataset groot is. Andrew Ng, een vooraanstaand expert in machine learning en AI, raadt aan gradient descent te overwegen wanneer het aantal features, n, groter is dan 10.000. Bij 10.000 features of minder ben je mogelijk beter af met een analytische aanpak zoals de normale vergelijking, omdat je geen waarde voor de learning rate hoeft te kiezen, wat betekent dat je één hyperparameter minder hoeft af te stemmen. We moeten er echter bij zeggen dat programmeertalen zoals R of Python in de praktijk QR-decompositie gebruiken om de coëfficiënten van een ordinary least squares lineaire regressie te vinden, omdat QR-decompositie numeriek stabieler en efficiënter is dan de normale vergelijking. 

De normale vergelijking from scratch in Python

Laten we een regressieprobleem genereren om deze vergelijking te testen:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_regression

# Generate a regression problem
X, y = make_regression(
    n_samples=100,
    n_features=2,
    n_informative=2,
    noise = 10,
    random_state=25
    )

# Visualize feature at index 1 vs target
plt.subplots(figsize=(8, 5))
plt.scatter(X[:, 1], y, marker='o')
plt.xlabel("Feature at Index 1")
plt.ylabel("Target")
plt.show()

Hier gaan we de normale vergelijking implementeren:

# adds x0 = 1 to each instance
X_b = np.concatenate([np.ones((len(X), 1)), X], axis=1)
# calculate normal equation
theta_best = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y)
# best values for theta
intercept, *coef = theta_best
print(f"Intercept: {intercept}\n\
Coefficients: {coef}")

Intercept: 0.35921242677977794
Coefficients: [6.129199175400593, 96.44309685893134]

Laten we ons model op de proef stellen door een voorspelling te doen:

# making a new sample
new_sample = np.array([[-2, 0.25]])
# adding a bias term to the instance
new_sample_b = np.concatenate([np.ones((len(new_sample), 1)), new_sample], axis=1)
# predicting the value of our new sample
new_sample_pred = new_sample_b.dot(theta_best)
print(f"Prediction: {new_sample_pred}")
Prediction: [12.21158829]

Telkens wanneer je een machinelearningalgoritme from scratch implementeert, is het handig om je oplossing te valideren; Scikit-learn is een van de populairste machinelearningbibliotheken in Python. Het bevat verschillende implementaties van algoritmen, waaronder lineaire regressie, die we zullen gebruiken om onze normale vergelijking te valideren.

from sklearn.linear_model import LinearRegression

lr = LinearRegression()
lr.fit(X, y)

print(f"Intercept: {lr.intercept_}\n\
Coefficients: {lr.coef_}")
print(f"Prediction: {lr.predict(new_sample)}")

Intercept: 0.3592124267797807
Coefficients: [ 6.12919918 96.44309686]
Prediction: [12.21158829]

De oplossingen zijn ongeveer gelijk, dus we kunnen bevestigen dat onze oplossing correct is.

Veelgestelde vragen (FAQ)

Wat is de normale vergelijking in machine learning?

De normale vergelijking is een analytische aanpak om de waarde van θ te vinden die de verliesfunctie minimaliseert, zonder te hoeven itereren.

Wanneer moet ik de normale vergelijking gebruiken in plaats van gradient descent?

Het is beter om de normale vergelijking te gebruiken wanneer we weinig features hebben. Het berekenen van de normale vergelijking wordt computationeel uitdagend wanneer het aantal features in onze dataset groot is.

Kan de normale vergelijking worden gebruikt voor logistische regressie?

Helaas niet. Er is maar één conditioneel model in de classificatietheorie met een gesloten vorm oplossing: lineaire regressie.

Wat is het verschil tussen de normale vergelijking en gradient descent?

Het duidelijke verschil tussen de normale vergelijking en gradient descent is dat de normale vergelijking een analytische aanpak gebruikt om het minimum van de verliesfunctie te vinden, terwijl gradient descent een iteratieve aanpak gebruikt. Een ander verschil is dat je geen learning rate hoeft af te stemmen om de normale vergelijking te berekenen, aangezien er slechts één stap nodig is om de parameters θ te vinden.

Onderwerpen
Machine Learning
Data Science
Python
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken