Hoofdstuk 30 — Supervised learning: classificatie (LogisticRegression, SVM, Decision Trees)
Let op: De tekst is in het Nederlands; alle Python codevoorbeelden zijn in het Engels.
Doelen:
- Basis van classificatieproblemen, decision boundaries, probabilistische output.
- Vergelijken van drie klassiekers: Logistic Regression, SVM en Decision Tree.
- Evaluatie met accuracy, precision/recall/F1 en confusion matrix.
Installatie:
pip install scikit-learn numpy pandas matplotlib
30.1 Voorbeelddata en splitsing
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
X, y = load_breast_cancer(return_X_y=True, as_frame=True)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42, stratify=y
)
30.2 Logistic Regression
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
logreg = Pipeline([
('scaler', StandardScaler()),
('clf', LogisticRegression(max_iter=2000))
])
logreg.fit(X_train, y_train)
print('LogReg accuracy:', logreg.score(X_test, y_test))
30.3 Support Vector Machine (SVM)
from sklearn.svm import SVC
svm = Pipeline([
('scaler', StandardScaler()),
('clf', SVC(kernel='rbf', probability=True, random_state=42))
]).fit(X_train, y_train)
print('SVM accuracy:', svm.score(X_test, y_test))
30.4 Decision Tree
from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier(max_depth=4, random_state=42)
tree.fit(X_train, y_train)
print('Tree accuracy:', tree.score(X_test, y_test))
30.5 Evaluatiemetrieken
from sklearn.metrics import classification_report, confusion_matrix
for name, model in [('LogReg', logreg), ('SVM', svm), ('Tree', tree)]:
y_pred = model.predict(X_test)
print(name)
print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred, digits=3))
30.6 Probabilities en ROC‑AUC
from sklearn.metrics import roc_auc_score, RocCurveDisplay
import matplotlib.pyplot as plt
y_prob = logreg.predict_proba(X_test)[:, 1]
auc = roc_auc_score(y_test, y_prob)
print('ROC‑AUC:', auc)
RocCurveDisplay.from_estimator(logreg, X_test, y_test)
plt.show()
30.7 Samenvatting
- Logistic Regression: lineair, snel, goed baseline‑model.
- SVM: krachtig met kernels, vaak sterke performance; let op schaal en hyperparameters.
- Decision Trees: interpreteerbaar, weinig preprocessing nodig, maar kunnen overfitten.