Exercices Machine Learning Stacking : combiner plusieurs modèles
🎉

Bravo!

Avancé 🧠 Fondamentaux 30 XP 0 personnes ont réussi

Stacking : combiner plusieurs modèles

Tu as un Random Forest bon sur les interactions complexes, une regression logistique solide sur les relations lineaires, et un KNN qui capte bien les structures locales. Et si tu pouvais combiner leurs forces ? C'est exactement ce que fait le stacking : un meta-modele qui apprend a fusionner les predictions de plusieurs modeles de base.

Chaque modèle de base a ses forces et ses faiblesses. Un arbre capture les interactions non lineaires, une regression logistique est bonne pour les relations lineaires, un KNN capte les structures locales. Le meta-modèle apprend a tirer le meilleur de chacun.

from sklearn.ensemble import StackingClassifier
estimators = [
('rf', RandomForestClassifier()),
('lr', LogisticRegression()),
('knn', KNeighborsClassifier()),
]
stacking = StackingClassifier(estimators=estimators, final_estimator=LogisticRegression())

Écris une fonction stacking_classifiers(X_train, y_train, X_test, y_test) qui crée un stacking avec RandomForest, LogisticRegression et KNN comme base learners, et LogisticRegression comme meta-modèle. Renvoie :
'accuracy' : accuracy sur le test set
'accuracy_par_modele' : dictionnaire nom -> accuracy de chaque base learner seul

Tests (4/4)

Accuracy entre 0 et 1
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=300, n_features=10, random_state=42)
result = stacking_classifiers(X[:200], y[:200], X[200:], y[200:])
assert 0 <= result['accuracy'] <= 1
3 modèles de base
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=300, n_features=10, random_state=42)
result = stacking_classifiers(X[:200], y[:200], X[200:], y[200:])
assert len(result['accuracy_par_modele']) == 3
Noms des modèles
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=300, n_features=10, random_state=42)
result = stacking_classifiers(X[:200], y[:200], X[200:], y[200:])
assert set(result['accuracy_par_modele'].keys()) == {'rf', 'lr', 'knn'}
Scores individuels valides
import numpy as np
from sklearn.datasets import make_classification
X, y = make_classification(n_samples=300, n_features=10, random_state=42)
result = stacking_classifiers(X[:200], y[:200], X[200:], y[200:])
assert all(0 <= v <= 1 for v in result['accuracy_par_modele'].values())

Indices (3 disponibles)

solution.py