Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Hoofdstuk 27 — Introductie tot machine learning met scikit‑learn: API‑filosofie

Let op: De tekst is in het Nederlands; alle Python codevoorbeelden zijn in het Engels.

Doelen van dit hoofdstuk:

  • Begrijpen van de uniforme API van scikit‑learn (fit/transform/predict/score).
  • Leren werken met schatters (Estimators), transformators en pipelines.
  • Vertrouwd raken met datasets en train/test‑splits.

Aanbevolen voorkennis: NumPy/pandas (Deel III–IV) en basis statistiek.

Installatie:

pip install scikit-learn numpy pandas

27.1 Kernconcepten van scikit‑learn

  • Estimator: elk object met .fit(X, y=None) dat parameters leert uit data.
  • Transformer: een Estimator met .transform(X) (of .fit_transform(X)), bv. StandardScaler.
  • Predictor: een Estimator met .predict(X) (en soms .predict_proba(X)).
  • Scorer: methode .score(X, y) of losse scoringsfunctie (bv. accuracy_score).
  • Consistente API:
    • fit(X, y) leert;
    • transform(X) zet om;
    • predict(X) voorspelt;
    • set_params/get_params voor hyperparameters;
    • werkt met arrays (NumPy), sparse matrices of pandas DataFrames.

27.2 Dataset laden en train/test‑split

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
import pandas as pd

iris = load_iris(as_frame=True)
X = iris.data  # features als DataFrame
y = iris.target  # 0,1,2

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)
print(X_train.shape, X_test.shape)

27.3 Eerste model: een eenvoudige classifier

from sklearn.linear_model import LogisticRegression

clf = LogisticRegression(max_iter=1000, n_jobs=None)
clf.fit(X_train, y_train)
print('Accuracy (train):', clf.score(X_train, y_train))
print('Accuracy (test): ', clf.score(X_test, y_test))

Belangrijk: gebruik een vaste random_state voor reproduceerbaarheid waar nodig.

27.4 Transformers en Pipelines

Waarom Pipelines?

  • Voorkom dat je lekken introduceert (leakage) door transformaties uitsluitend op train uit te voeren en dezelfde transformatie op test toe te passen via de pipeline.
  • Combineer preprocessing en een model in één object dat fit/predict ondersteunt.

Voorbeeld met standaardiseren van features:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

pipe = Pipeline([
    ('scaler', StandardScaler()),
    ('model', LogisticRegression(max_iter=1000))
])
pipe.fit(X_train, y_train)
print('Pipeline accuracy (test):', pipe.score(X_test, y_test))

27.5 Hyperparameters en set_params

pipe.set_params(model__C=0.5, model__penalty='l2')
pipe.fit(X_train, y_train)
print(pipe.get_params()['model__C'])

27.6 Evaluatie en cross‑validation (sneak peek)

from sklearn.model_selection import cross_val_score
scores = cross_val_score(pipe, X, y, cv=5, scoring='accuracy')
print('CV accuracy:', scores.mean(), '+/-', scores.std())

27.7 Veelvoorkomende valkuilen

  • Data leakage door scaler/encoder op volledige dataset te fitten buiten een pipeline.
  • Onjuiste metriek (accuracy bij scheve klassenverdeling); kies passend bij probleem.
  • Geen vaste random_state en daardoor onstabiele resultaten.

27.8 Samenvatting

  • scikit‑learn biedt een uniforme API met Estimators, Transformers, Predictors.
  • Splits data in train/test; gebruik Pipelines voor preprocessing + model.
  • Gebruik cross‑validation voor robuuste evaluatie en set_params/get_params voor tunen.