Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Scikit-learn โ€” De Estimator & Transformer API

Scikit-learn is de standaardbibliotheek voor machine learning in Python. Ze biedt รฉรฉn consistente API voor honderden algoritmes โ€” van preprocessing tot classificatie, regressie en clustering.

Het grote voordeel: je hoeft niet elke bibliotheek apart te leren. Als je de scikit-learn API kent, werkt vrijwel alles op dezelfde manier.

Zelf implementerenScikit-learn
NormalisatieFormules zelf schrijvenStandardScaler().fit_transform(X)
Train/test splitsingHandmatig indexerentrain_test_split(X, y)
Model trainenAlgoritme zelf implementerenmodel.fit(X_train, y_train)
EvaluerenMetriek berekenenmodel.score(X_test, y_test)
ConsistentieWisselend per algoritmeAltijd dezelfde interface

Scikit-learn is gebouwd bovenop NumPy en Pandas โ€” data gaat erin als arrays of DataFrames.

1.7.2

De twee centrale interfacesยถ

Scikit-learn kent twee basisinterfaces die consequent terugkomen:

Estimator โ€” leert iets uit data:

  • fit(X, y) โ€” train het model op de data

  • predict(X) โ€” maak voorspellingen voor nieuwe data

  • score(X, y) โ€” evalueer de kwaliteit van de voorspellingen

Transformer โ€” zet data om naar een andere representatie (niet te verwarren met Transformers in de context van neurale netwerken):

  • fit(X) โ€” leer de parameters (bv. gemiddelde en standaardafwijking)

  • transform(X) โ€” pas de geleerde parameters toe op data

  • fit_transform(X) โ€” combinatie van beiden (enkel op trainingsdata!)

Veel klassen zijn tegelijk Estimator รฉn Transformer.

Data voorbereidenยถ

We werken met de penguins-dataset: lichaamskenmerken van drie pinguรฏnsoorten.

(333, 7)
Loading...
[[ 39.1  18.7 181. ]
 [ 39.5  17.4 186. ]
 [ 40.3  18.  195. ]
 [ 36.7  19.3 193. ]
 [ 39.3  20.6 190. ]]
shape: (333, 3)

Trainings- en testsetยถ

train_test_split verdeelt de data willekeurig in een trainingsset (waarmee je leert) en een testset (waarmee je evalueert). De random_state zorgt voor reproduceerbaarheid.

Train: (266, 3), Test: (67, 3)

Transformers โ€” data normaliserenยถ

Veel ML-algoritmes zijn gevoelig voor de schaal van features. Een waarde in millimeter (bv. 180) en รฉรฉn in gram (bv. 4000) bevinden op totaal verschillende schalen โ€” dat heeft een negatieve invloed op het leerproces.

StandardScalerยถ

StandardScaler herschaalt elke feature zodat het gemiddelde 0 is en de standaardafwijking 1.

Learned means: [ 44.1   17.16 201.  ]
Learned std:   [ 5.39  1.98 13.89]
After scaling โ€” mean: [-0. -0. -0.], std: [1. 1. 1.]

Waarom fit enkel op trainingsdata? Als je ook de testdata gebruikt bij fit, lekt informatie van de test naar het leerproces โ€” dit heet data leakage. Je testset moet onbekend blijven.

MinMaxScalerยถ

MinMaxScaler schaalt elke feature naar een vaste range (standaard [0, 1]).

min per feature: [0. 0. 0.]
max per feature: [1. 1. 1.]

OneHotEncoderยถ

Categorische features (tekst) kunnen niet rechtstreeks in een ML-model. OneHotEncoder zet elke categorie om naar een binaire kolom.

Categories: [array(['Adelie', 'Chinstrap', 'Gentoo'], dtype=object)]

Encoded (first 5 rows):
[[1. 0. 0.]
 [1. 0. 0.]
 [1. 0. 0.]
 [1. 0. 0.]
 [1. 0. 0.]]
['species_Adelie' 'species_Chinstrap' 'species_Gentoo']

Estimators โ€” modellen trainenยถ

Een Estimator leert een verband tussen input X en output y. De interface is voor elk model identiek: fit โ†’ predict โ†’ score.

We gebruiken LinearRegression enkel als voorbeeld om de interface te demonstreren โ€” het algoritme zelf behandelen we later in de cursus.

Trained! Coefficients: [ 20.8  19.9 697.9]
Intercept:             4214.8
First 5 predictions: [3037. 5255. 3925. 4087. 3761.]
Actual values:       [3250. 4875. 4000. 3675. 4050.]
<Figure size 500x500 with 1 Axes>
Rยฒ on test set: 0.798

Geleerde attributenยถ

Na fit() slaat scikit-learn de geleerde parameters op als attributen met een underscore-suffix (_). Dit is een vaste conventie doorheen de hele bibliotheek.

mean_:  [ 44.10300752  17.1612782  201.        ]
scale_: [ 5.39474737  1.97681217 13.88973765]
var_:   [ 29.10329923   3.90778634 192.92481203]
n_samples_seen_: 266

Oefeningenยถ

Oefening 1 โ€” Laad de penguins-dataset, verwijder rijen met ontbrekende waarden en maak een train/test-splitsing (80/20) van de numerieke kolommen bill_length_mm, bill_depth_mm, flipper_length_mm en body_mass_g. Gebruik random_state=0. Druk de shape van elke deelset af.

Oefening 2 โ€” Pas een StandardScaler toe op de features uit oefening 1. Fit enkel op de trainingsset en transformeer daarna zowel train als test. Verifieer dat het gemiddelde van de geschaalde trainingsfeatures โ‰ˆ 0 is en de standaardafwijking โ‰ˆ 1.

Oefening 3 โ€” Pas een MinMaxScaler toe op dezelfde features zodat alle waarden in [0, 1] liggen. Druk het minimum en maximum per feature af na schaling.

Oefening 4 โ€” Encodeer de kolom island van de penguins-dataset met een OneHotEncoder. Druk de kolomnamen af na encoding (get_feature_names_out()). Hoeveel kolommen krijg je?

Oefening 5 โ€” Train een LinearRegression-model om body_mass_g te voorspellen vanuit de drie geschaalde numerieke features (uit oefening 2). Druk de Rยฒ-score op de testset af. Bekijk daarna de geleerde coรซfficiรซnten (coef_) โ€” welke feature heeft de grootste impact?