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_paramsvoor 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/predictondersteunt.
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_stateen 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_paramsvoor tunen.